Verse を使用して作成されたパズルは 2 つあります。1 つ目は、タグ付きライト パズル です。タグ付きライト パズルは、地下 2 階の階段の裏の隠し部屋で使用されます。
チュートリアルの最後のセクションからコードをコピーして貼り付けることもできますが、Verse 言語の仕組みを理解するためにパズルをステップバイステップで作成していくことを強くお勧めします。
2 つ目のパズルは、適切なシーケンスで正しいスイッチがトリガーされたことを確認するため、ハードコードされたロジック キーを使用してそれぞれのスイッチの仕掛けを確認します。
適切なスイッチがトリガーされると、スイッチに伴って成功サウンドが流れます。 同様に、シーケンス中に誤ったスイッチがオンになると失敗サウンドとメッセージがトリガーされます。 パズルが解けると、最終成功サウンドとメッセージが再生され、4 つのアイテム スポナーがアクティブ化されます。
配列を使用すると、有効および無効のステートの確認に加えて、ステートに接続された仕掛けをトリガーできます。 この例では、コーディングの初心者がコードが実行する処理の内容を理解できるように、アンサー キーはハードコードされています。
パズルの仕掛けを設定する
このパズルには、以下の仕掛けが必要です。
-
スイッチの仕掛け × 4
-
オーディオ プレイヤーの仕掛け × 3
-
アイテム スイッチの仕掛け × 4
-
HUD メッセージの仕掛け × 2
-
トリガーの仕掛け × 1
-
Verse の仕掛け × 1
アイテム スポナーの名前をスポーンするアイテムに変更します。
スイッチの仕掛け
ドアの隣のウォールにスイッチの仕掛けを配置し、以下のオプションを設定します。
| オプション | 値 | 説明 |
|---|---|---|
| 仕掛けのモデル | サーキット ブレーカー | このパズルでは、プレイヤーにサーキット ブレーカーを切り替えさせます。 |
| サウンド | False | オーディオの仕掛けは、有効、無効、パズルの成功ステートに対して異なるサウンド キューを再生します。 |
| インタラクション時間 | 0.1 | インタラクション時間は、即時にします。 |
| インタラクション範囲 | 1.0 | プレイヤーは、インタラクションを行うスイッチの前のタイル 1 つ分のエリアに立っていなくてはなりません。 |
| ゲーム開始時に状態を確認 | False | このチェックは、ユーザーに代わって Verse の仕掛けにより実行されます。 |
壁にスイッチの仕掛けをさらに 3 つコピーし、並べて配置します。
オーディオの仕掛け
正方形の中心にオーディオの仕掛けを配置します。 オーディオ オプションを次のように設定します。
| オプション | 値 | 説明 |
|---|---|---|
| アクティベート時にオーディオを再開 | True | オーディオは 1 回以上再生され、再生は毎回最初から始まるようにする必要があります。 |
| ヒット時に再生 | False | Verse の仕掛けは、オーディオの仕掛けをトリガーします。 |
さらに 2 つオーディオの仕掛けをコピーします。 仕掛けの名前を変更し、それぞれに次のようにサウンド キューを追加します。
-
有効 - 有効を示すオーディオの仕掛けとして、Match_Round_Change_01_Cue を再生します。
-
無効 - 無効を示すオーディオの仕掛けとして、Player_Checkpoint_Trigger_Cue を再生します。
-
完了 - 完了を示すオーディオの仕掛けとして、CTF_Return_Team_Cue を再生します。
トリガーの仕掛け
スイッチの右側に、トリガーの仕掛けを設置して次のオプションを設定します。
| オプション | 値 | 説明 |
|---|---|---|
| ゲーム中に表示 | False | この仕掛けは、ゲーム中に表示する必要はありません。 |
| ゲーム開始時に有効化 | False | トリガーの仕掛けは、Verse の仕掛けが制御します。 |
| プレイヤーが起動 | False | トリガーの仕掛けは、Verse の仕掛けが制御します。 |
| 乗り物で起動 | False | トリガーの仕掛けは、Verse の仕掛けが制御します。 |
| シーケンサーで起動 | False | トリガーの仕掛けは、Verse の仕掛けが制御します。 |
| 水により起動 | False | トリガーの仕掛けは、Verse の仕掛けが制御します。 |
| 起動可能回数 | True、10 | パズル内でトリガーを 1 回以上使用できるようにする必要があります。 |
| 視覚効果の発動 | False | 視覚効果は必要ありません。 |
| 特殊効果の発動 | False | サウンドはオーディオの仕掛けが制御します。 |
仕掛けの名前を無効のトリガーと変更します。
HUD メッセージの仕掛け
次のオプションを使用して、1 つ目の HUD メッセージの仕掛けを設定します。
| オプション | 値 | 説明 |
|---|---|---|
| メッセージ | 無効の HUD メッセージ:
アイテム発見の HUD メッセージ:
|
パズルのこれらのメッセージは、失敗ステートと成功ステートを対象としています。 |
| 表示時間 | 無効の HUD メッセージ - 3.0 完了の HUD メッセージ - 5.0 |
メッセージを表示する時間です。 |
その後、HUD メッセージの仕掛けが部屋で表示されないように HUD メッセージの仕掛けを地下室のウォールから移動し、コピーします。
それぞれの HUD メッセージの仕掛けの名前を次のように変更します。
-
アイテム発見の HUD メッセージ
-
無効の HUD メッセージ
Verse の仕掛け
これで、パズルを制御する Verse プログラムを作成する準備が整いました。switch_state_puzzle という名前の新しい Verse の仕掛けを Verse Explorer で作成し、その仕掛けをレベルにドラッグします。(新しい Verse の仕掛けを作成する詳しい手順については、「Verse を使用して独自の仕掛けを作成する」を参照してください。)
パズルのデザイン
正しいシーケンスでスイッチをオンにすると、プレイヤーはエスケープ ルームのこのポイントを通過して移動することができます。
プレイヤーが正しいシーケンスでスイッチをオンにすると、ベルの音が鳴ります。 誤ったスイッチをオンにすると、ブザーの音が鳴り、スイッチがリセットされます。 無効なステータスはメッセージをポップアップします。パズルの完了に成功すると、成功サウンドを再生し、脱出のヒントになるメッセージを表示してアイテムをスポーンします。
次のフローチャートを使用して、パズルのロジックを表示できます。
画像をクリックすると拡大表示されます。
パズルの正しい解答は次のとおりです。
| パズル解答マトリックス | ||||
|---|---|---|---|---|
| スイッチ | 2 | 3 | 1 | 4 |
| 1 | X | |||
| 2 | X | X | ||
| 3 | X | X | X | |
| 4 | X | X | X | X |
使用する Verse 言語機能
-
if、then、else:if、then、およびelse式を使用して、ステートに依存する各スイッチの仕掛けとその他の仕掛けの有効および無効のステートを検出できます。 -
failure:失敗コンテキストは、パズルとその解答の現在のステートの決定に使用します。 -
for:for式は、パズルの各スイッチをイテレートし、それに対する演算を行うために使用します。
使用する API
-
編集可能なプロパティ:エディタでカスタマイズできるように、Verse で作成した複数の仕掛けのプロパティが UEFN に公開されています。新しいパズル コンフィギュレーションをこれらのプロパティを変更することにより作成できます。
-
仕掛けのイベント:ボタンの
InteractedWithEventはゲーム ステートを制御するために使用されます。
スイッチのインタラクション
パズルの実行に必須のステップについて考えます。まず、プレイヤーがボックスをチェックしたとき、Verse の仕掛けがイベントを登録するか確認します。そのためには、まず 疑似コード を書き込み、インタラクションの概念を証明します。
-
switch_state_puzzle クラスの定義の下に、次の編集可能なフィールドを追加します。
-
Switchesという名前のswitch_device型の編集可能な配列。これは、パズルのすべてのスイッチを参照します。 -
SwitchSubscriptionsという名前のcancelable型の変数配列。これは、スイッチのリセットに使用できる、各 switch_device サブスクリプションへの参照を保持します。
-
switch_state_puzzle := class(creative_device):
@editable
Switches : []switch_device = array{} #プレイヤーがインタラクトできるスイッチを参照する
var SwitchSubscriptions : []cancelable = array{}
-
同じファイル内に、
switch_event_handlerという名前の新規クラスを作成します。このクラスで Verse の仕掛けとスイッチを識別します。 -
新しいメソッド
OnSwitchPressed()をswitch_event_handlerクラスに追加します。 このメソッドは、item_switch_puzzleクラスにCheckSequence()を呼び出すことで、プレイヤー インタラクションに対して Verse の仕掛けを確認します。また、スイッチがインタラクトされるたびに Clicked を出力します。
## スイッチ インタラクションを扱うイベント ハンドラ クラス
## このイベント ハンドラは、上記のループのイベントに関連付けられています。
switch_event_handler := class():
PuzzleDevice : item_switch_puzzle
Switch : switch_device
OnSwitchPressed(InPlayer : agent) : void =
Print("Clicked")
PuzzleDevice.CheckSequence(InPlayer)
出力ロガーを追加する
コードが正常かどうかを確認する方法の 1 つは、ログに出力することです。 これにより、メッセージを出力することでコードのどの部分が計画どおりに機能するかを視覚的に確認できます。 出力ログをクリエイティブの仕掛けクラス上に追加します。
Print<native><public>(Message:[]char, Level:log_level):void
スイッチを参照する
次に、パズル内でスイッチの仕掛けを参照する手段が必要です。 スイッチの仕掛けを参照すると、ゲームの実行時にすべてのスイッチをループ処理し、各スイッチにイベント ハンドラを追加することができます。
-
switch_state_puzzleクラスのOnBegin()にfor式を追加し、Switches配列の各Switchをイテレートします。各Switchのインデックスを取得し、SwitchIndex変数に保存します。 -
print コマンドに「Switch {SwitchIndex} added」と入力し、実行時間中にインタラクトされるスイッチを識別する for 式の下に出力関数を追加します。
-
パズルの解決はスイッチ ステートの特定の順番に基づいているため、いずれかのスイッチのステートが変わるたびにパズルが解決したかを確認する必要があります。そのためには、先ほど定義した、
switch_event_handlerクラスを使用して、スイッチごとに 2 つの異なるイベントをリッスンします。各スイッチに 2 つのサブスクリプションを作成します。1 つはTurnedOnEventスイッチ用、もう 1 つはTurnedOffEventスイッチ用です。両方のイベントをswitch_event_handlerクラスのOnSwitchPressed()関数にサブスクライブします。switch_state_puzzleと現在のSwitchの両方に参照を渡します。
## 実行中のゲームで仕掛けが開始されたときに実行します
OnBegin<override>()<suspends>:void=
Print("Loading Switch Puzzle")
# 各スイッチのループ処理を行い、各スイッチへのイベント ハンドラを追加する
for (SwitchIndex -> Switch : Switches):
Print("Switch {SwitchIndex} added")
Switch.TurnedOnEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
Switch.TurnedOffEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
- Visual Studio Code にスクリプトを保存し、UEFN で、[Verse] -> [Build Verse Code (Verse コードをビルド)] をクリックします。
レベルをテストすると、スイッチをオンまたはオフにするたびに、インタラクトしたスイッチのインデックスと Clicked という単語の両方が出力されるはずです。
パズルのステート
パズルの各スイッチには、有効と無効の 2 つのステートがあります。
パズルを解決するには、プレイヤーは特定の順番でスイッチをオンに切り替える必要があります。 この順番をコードで実装するには、各スイッチの有効ステートのシーケンスを定義し、プレイヤーがスイッチ ステートを更新するたびにこのシーケンスを確認する必要があります。
-
新しいメソッド
ValidState()をswitch_state_puzzleクラスに追加します。このメソッドは、プレイヤーがスイッチを有効ステートに切り替えるたびに文字列を受け取り、音声クリップを再生し、プレイヤーが正しい方向に進んでいることを音声で知らせます。 -
ValidState()内で、渡されたState文字列を出力し、先ほど設定したValidAudioPlayerでPlay()を呼び出します。
# ステートが有効な場合に実行するアクション
ValidState(State : string) : void =
# 確認サウンドを再生する
Print("Valid {State}")
ValidAudioPlayer.Play()
- 新しいメソッド
InvalidState()をswitch_state_puzzleクラスに追加します。このメソッドは、プレイヤーが無効ステートをトリガーすると、サウンドを再生したあとにすべてのスイッチをリセットします。
# ステートが無効の場合に実行するアクション
InvalidState(InPlayer : agent) : void =
# ブザーの音を再生する
# すべてのスイッチをクリアする
Print("Invalid")
InvalidState()内で、Invalid (無効) を出力し、先ほど設定したInvalidAudioPlayerでPlay()を呼び出してオーディオ クリップを再生することで、プレイヤーに無効ステートをトリガーしたことを知らせます。また、InvalidTriggerにTrigger()を呼び出し、InvalidHUDMessageにShow()を呼び出す必要があります。
# ステートが無効の場合に実行するアクション
InvalidState(InPlayer : agent) : void =
# ブザーの音を再生する
# すべてのスイッチをクリアする
Print("Invalid")
InvalidAudioPlayer.Play()
InvalidTrigger.Trigger()
InvalidHUDMessage.Show()
スイッチの仕掛けのイベントをサブスクライブする for ループを作成します。 print 文は、プレイヤーがどのスイッチを押すかと、スイッチが押される順番を特定します。
# 各スイッチのループ処理を行い、各スイッチへのイベント ハンドラを追加する
for (SwitchIndex -> Switch : Switches):
Print("Switch {SwitchIndex} added")
Switch.TurnedOnEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
Switch.TurnedOffEvent.Subscribe(switch_event_handler{PuzzleDevice := Self, Switch := Switch}.OnSwitchPressed)
for ループで、すべてのスイッチをループし、各スイッチをオフにします。スイッチの TurnOff() メソッドにはプレイヤー発信者が必要なため、無効ステートをトリガーしたプレイヤーを渡します。
## スイッチをループし、各スイッチをオフにする
for (SwitchIndex -> Switch : Switches):
Switch.TurnOff(InPlayer)
- コードを 保存 し、UEFN に戻って [Verse] > [Build Verse Code] を選択します。
次に、各スイッチをループし、パズル マトリックスに対してスイッチのステートを確認し、スイッチの切り替えがどの状態 (有効または無効) に該当するかを判断するロジックを item_switch_puzzle クラスで作成します。
スイッチ ステートをソートする
スイッチの切り替えの有効性を確認するには、スイッチの現在のステートを確認する for 式を使用する CheckSequence メソッドを作成します。シーケンスでどのスイッチ切り替えが有効でどれが無効かを定義するために、if 文を使用してスイッチのステート変更が有効かどうかを定義することができます。
- 新しいメソッド
CheckSequence()を追加します。このメソッドは、プレイヤーがスイッチ ステートの変化とスイッチ ステートに対応するロジック値の配列を発信していると認識します。CheckSequence()で、forループを作成し、Switches配列の各スイッチをイテレートします。配列の各スイッチのインデックスを取得し、SwitchIndex変数に保存します。for ループでGetCurrentState[]を呼び出して各スイッチ ステートを確認します。次にスイッチのステートをログに出力します。
# スイッチのシーケンスを検証するための関数
CheckSequence(InPlayer : agent) : void =
for (SwitchIndex -> Switch : Switches):
if(Switch.GetCurrentState[]) then Print("{SwitchIndex} On") else Print("{SwitchIndex} Off")
次に、CheckSequence() を使用して、確認する対象のステートのシーケンスを作成する必要があります。そのためには、switch_event_handler の OnSwitchPressed() メソッドに新規機能を追加します。
シーケンス ステート
配列を使用して、スイッチ ステートのためのシーケンスを作成します。各配列は、スイッチの切り替えのシーケンスの有効性を確認します。ロガーにシーケンスの数 (「1」、「2」、「3」、および「4」) を出力することでスイッチが Clicked かどうか、およびシーケンスが有効かどうかをログする出力ロガーを使用して、スイッチに対するプレイヤーのアクションのシーケンスをログします。
OnSwitchPressed()で、if文の中で、プレイヤーとロジック値の新規配列の両方を渡してCheckSequence()を呼び出します。この新規配列はスイッチのシリーズに対応する必要があります。false値はスイッチオフを表し、true値はスイッチオンを表します。プレイヤーに最初に押させたいスイッチをtrueに設定し、他のすべての値を False に設定します。CheckSequence[]への呼び出しが成功すると、最初のスイッチが押されたことを表す「1」を渡してValidState()を呼び出します。
OnSwitchPressed(InPlayer : agent) : void =
Print("Clicked")
PuzzleDevice.CheckSequence(InPlayer)
- スイッチを押させたい順番で、パズルの各スイッチのスイッチ切り替えのアンサー キーをハードコードします。
if:
# 有効なステートを確認し、ステートの検証をハードコードする
# [off],[off],[on],[off] State One
not Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("One")
else if:
# 有効なステートを確認する
#[On], [Off], [On], [Off] State Two
Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Two")
else if:
# 有効なステートを確認する
#[On], [On], [On], [Off] State Three
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Three")
else if:
# 有効なステートを確認する
#[On], [On], [On], [On] State Four, puzzle is completed
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
Switches[3].GetCurrentState[]
then:
CompletedState()
- 最後に、
InvalidState()を呼び出すelse式を末尾に追加します。これは、CheckSequence[]への呼び出しのいずれかが失敗した場合に起こります。
else:
# 有効なステートでないため、無効
InvalidState(InPlayer)
- これで、
switch_event_handlerコードは次のようになっているはずです。
# スイッチのシーケンスを検証するための関数
CheckSequence(InPlayer : agent) : void =
for (SwitchIndex -> Switch : Switches):
if(Switch.GetCurrentState[]) then Print("{SwitchIndex} On") else Print("{SwitchIndex} Off")
if:
# 有効なステートを確認し、ステートの検証をハードコードする
# [off],[off],[on],[off] State One
not Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("One")
else if:
# 有効なステートを確認する
#[On], [Off], [On], [Off] State Two
Switches[0].GetCurrentState[]
not Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Two")
else if:
# 有効なステートを確認する
#[On], [On], [On], [Off] State Three
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
not Switches[3].GetCurrentState[]
then:
ValidState("Three")
else if:
# 有効なステートを確認する
#[On], [On], [On], [On] State Four, puzzle is completed
Switches[0].GetCurrentState[]
Switches[1].GetCurrentState[]
Switches[2].GetCurrentState[]
Switches[3].GetCurrentState[]
then:
CompletedState()
else:
# 有効なステートでないため、無効
InvalidState(InPlayer)
- コードを 保存 し、UEFN に戻って [Verse] > [Build Verse Code] を選択します。
これで、ゲームでスイッチをオンにすると次のようなログが出力されます。
-
Loading Switch Puzzle - ゲームが開始したとき
-
Switch {SwitchIndex} added - ルートにスイッチが追加されたとき
-
Clicked - プレイヤーがスイッチをオンにしたとき
-
Valid {State} - プレイヤーがシーケンスの順番で正しいスイッチをオンにしたとき
-
Invalid - プレイヤーが誤ったスイッチをオンにしたとき
ログがスイッチの切り替えを正しく報告していれば、item_switch_puzzle クラスに編集可能な仕掛けをさらに追加して、それぞれのステートに何かをさせる準備は整いました。
仕掛けを追加する
プレイヤーがパズルの完了に成功し、パズルがスイッチの ValidState を CompletedState までループしたら、成功結果はアイテムの付与などを行う必要があります。
InvalidState についても同様です。 プレイヤーがパズルを間違えた場合、スクリプトはそれを説明し、プレイヤーにやり直す必要があることを知らせなければなりません。 そのためには、item_switch_puzzle クラスにさらに仕掛けを追加する必要があります。
スクリプトに編集可能な仕掛けを追加すると、Verse の仕掛けのユーザー オプションに仕掛けが表示されます。このオプションで仕掛けを Verse の仕掛けに接続して、Verse スクリプトに書き込まれているようにゲーム内で機能させることができます。
- item_switch_puzzle に次の @editable の仕掛けを追加します。
@editable
InvalidTrigger : trigger_device = trigger_device{}
@editable
InvalidHUDMessage : hud_message_device = hud_message_device{}
@editable
InvalidAudioPlayer : audio_player_device = audio_player_device{}
@editable
ValidAudioPlayer : audio_player_device = audio_player_device{}
@editable
FindItemsHUDMessage : hud_message_device = hud_message_device{}
@editable
CompletedAudioPlayer : audio_player_device = audio_player_device{}
@editable
ItemSpawners : item_spawner_device = item_spawner_device{} #これは、このパズルに関連するアイテム スポナーをすべて取得します
- 新しいメソッド
CompletedState()をitem_switch_puzzleクラスに追加します。このメソッドは、パズルが完了したときに実行するアクションを処理します。
## パズルが完了したときに実行するアクション
CompletedState() : void =
# 成功サウンドを再生する
# すべてのスイッチを無効に設定する
# 関連付けられたアイテム スポナーのアイテムをスポーンする
Print("Completed")
1. ItemSpawners で各アイテム スポナーをイテレートする CompletedState() メソッドに for 式を追加します。各アイテム スポナーを Enable() で有効にし、SpawnItem() を呼び出してプレイヤーにパズルを解決した報酬を付与します。
## 各アイテム スポナーを呼び出してアイテムをスポーンできるようにアイテム スポナーをループする
for (ItemSpawnerIndex -> ItemSpawner : ItemSpawners):
ItemSpawner.Enable()
ItemSpawner.SpawnItem()
- パズルが問題なく完成したら、先ほど設定した
CompletedAudioPlayerでPlay()を呼び出し、ItemSpawnerIndexを使用してアイテム スポナーに金属の要素をスポーンし、Enable1とSpawnItemを呼び出します。FindItemsHUDMessageでShow()を呼び出すことでプレイヤーに新しくスポーンしたアイテムを探す必要があることを知らせます。また、プレイヤーにはスイッチとのインタラクトを継続させないものとします。Switchesで各スイッチをループする 2 つ目の for 式を追加し、Disable()を呼び出してスイッチを無効にします。
# パズルが完了したときに実行するアクション
CompletedState() : void =
# 成功サウンドを再生する
# すべてのスイッチを無効に設定する
# 関連付けられたアイテム スポナーのアイテムをスポーンする
Print("Completed")
# 各アイテム スポナーを呼び出してアイテムをスポーンできるようにアイテム スポナーをループする
for (ItemSpawnerIndex -> ItemSpawner : ItemSpawners):
ItemSpawner.Enable()
ItemSpawner.SpawnItem()
# パズル シーケンス完了の特別なオーディオを再生する
CompletedAudioPlayer.Play()
#HUD メッセージを再生し、プレイヤーに新しくスポーンされたアイテムを探すよう伝える
FindItemsHUDMessage.Show()
# パズル完了時にすべてのスイッチを無効にする
for (SwitchIndex -> Switch : Switches):
Switch.Disable()
- コードを 保存 し、UEFN に戻って [Verse] > [Build Verse Code] を選択します。
これで、これらの仕掛けが UEFN のアイテム スイッチ パズルの仕掛けに追加されました。
仕掛けを選択する
すべての @editable の仕掛けが Verse の仕掛けに追加されています。次に、プルしたすべての仕掛けをアタッチして Verse の仕掛けにパズルを作成します。そのために、アウトライナー で item_switch_puzzle を選択し、すべての仕掛けスロットを [Details (詳細)] パネルで表示します。仕掛けをスロットに対応させるだけです。
-
パズルの スイッチ の仕掛けを アイテム スイッチ パズル の 4 つの配列要素の スイッチ に追加します。
-
無効トリガー を InvalidTrigger スロットに追加します。
-
無効の HUD メッセージ を InvalidHUDMessage スロットに追加します。
-
無効のオーディオ プレイヤー を InvalidAudioPlayer スロットに追加します。
-
有効のオーディオ プレイヤー を ValidAudioPlayer スロットに追加します。
-
発見の HUD メッセージ の仕掛けを FindHUDMessage スロットに追加します。
-
完了のオーディオ プレイヤー を CompletedAudioPlayer スロットに追加します。
-
アイテム スポナー を ItemSpawner の 4 つの配列要素に追加します。
-
[Visible In Game (ゲーム中に表示)] オプションをオフにし、Verse の仕掛けをゲーム時に非表示にします。
これでレベルのプレイテストを行い、パズルがエスケープ ルームの体験をどのように向上させるかを確認しましょう。
次のセクション
スイッチ ステート パズルがうまく動作するようになったら、シネマティックの再生が終わるとプレイヤーをオープニング シネマティックを見つめている状態から小屋の地下 2 階の監禁部屋に連れていく、自動テレポート Verse スクリプトを作成しましょう。