これは現在、実験的状態です。したがって、それらを試したり、フィードバックを提供したり、計画を確認したりできます。 現時点では、カスタム インベントリとアイテムを使用するプロジェクトを公開することはできません。
実験段階でアセットを作成した場合、下位互換性は保証されません。これらの機能の API は変更される場合があります。実験的機能の全てや特定の機能は当社独自の裁量で削除される場合がありますので、ご注意ください。 この機能を使い始める前に、既知の問題のリストを確認してください。
このチュートリアルでは、シーン グラフと Verse でカスタム インベントリおよびアイテムのシステムを使用してカスタム キーカード アイテムを作成する方法について説明します。
この例をビルドしてカスタム キーカードの作成方法を学習したら、ロックされたエリアにアクセスするためにカードを見つけて使用する目標を含むゲームでカスタム キーカードを使用できるようになります。 次に一部の例を示します。
強奪のオブジェクトを含む密室
ゲーム内の次のエリア
ボスを倒したときの宝物または報酬
始める前に
このチュートリアルを正常に完了するには、UEFN、シーン グラフおよび Verse コードについて十分に理解している必要があります。
プロジェクトを設定する
次の手順に従ってプロジェクトを設定し、カスタム インベントリとアイテムを有効にします。
UEFN を開き、任意の島のテンプレートからプロジェクトを作成します。 島のテンプレートでは、平らな領域を確保して作業したい場合、ブランク プロジェクトを使用することができます。 新しいプロジェクトに名前を付けて、作成をクリックするとエディタで開きます。
ツールバーから、[Project (プロジェクト)] をクリックし、[Project Settings (プロジェクト設定)] を選択します。
「実験的アクセス」セクションで、インベントリ システムのボックスをオンにします。 これにより、カスタム インベントリとカスタム アイテムが有効になります。
ルームをビルドする
まず、例として部屋を構築する必要があります。 この例は、ロックされた 2 つのドアを比較するデモのようにレイアウトされています。
最初の仕掛けでは、条件付きボタンの仕掛けを使用して、プレイヤーがキーカードを持っているかどうかを判断することで、ロックの仕掛けを備えたドアをフォートナイトのキーカードで開く方法を示します。
2 つ目は、既存のフォートナイトのキーカード アイテムの代わりにカスタム キーカードを使用する方法と、Verse を使用してプレイヤーがカスタム キーカードを持っているかどうかを判断する方法を示します。
例の部屋をビルドするには、次のフォートナイト アセットを使用できます。
ルーム: コンテンツ ブラウザで、[フォートナイト] > [Graybox アセット] > [デモ] に移動します。 この例では DemoRoom アセットを使用します。
デモ ブース: コンテンツ ブラウザで、[フォートナイト] > [Graybox アセット] > [デモ] に移動します。 DemoDisplay アセットを使用します。
ドア:
緑の壁のドア: [フォートナイト] > [ギャラリー] > [建築物] > [ティルテッド タワー壁ギャラリー N] に移動します。 最初の行の最後にある、Subban Interior Door C 02 a8a9d603 を見つけます。
上部にダークなトリムがあるタン ウォールのドア: 上記と同じギャラリーのすぐ左に、Subban Interior Door C 02 a9577d9d があります。
テーブル: [フォートナイト] > [小道具] > [スーパー] に移動します。 Academy Round Table A 13a04066 を見つけます。
仕掛けを設定する
必要な仕掛け:
プレイヤー スポナー × 1
ロックの仕掛け × 2
条件付きボタンの仕掛け × 1
ボリュームの仕掛け × 2
アイテム プレーサー (認証キーカードのアイテム) × 1
フォートナイトのキーカードのドアを設定する
典型的なフォートナイトのロックされたドアを設定するため、1 つのドアを選択します。 次の手順に従って、最初のドアの仕掛けを設定します。
ドアの隣のウォールにロックの仕掛けを配置します。 詳細パネルで、以下のように仕掛けのオプションをカスタマイズします。 リストにないオプションは、デフォルト値のままにしておくことができます。
オプション
設定値
説明
ゲーム中に表示
False (オフ)
これにより、ゲームの実行時にはロックの仕掛けが非表示になり、プレイヤーには見えなくなります。
ロックされた状態で開始
ロック中
これにより、ゲーム開始時にドアはロックされます。
ロック時にインタラクションを非表示
True (オン)
これにより、ドアがロックされているときにインタラクション プロンプトが非表示になります。
初期ドア位置
閉じている
これにより、ドアのデフォルトの開始位置がクローズされます。
ユーザー オプション - 機能で、ロックの仕掛けに次の関数を設定します。
ロック関数は、以下の手順 3 でボリュームの仕掛けを配置した後まで設定できない場合があります。
機能
ターゲットの仕掛け
バインドするイベント
説明
アンロック
条件付きボタン
起動時
条件付きボタンがアクティブになると、ドアのロックは解除されます。
ロック
ボリューム
出た時
プレイヤーがフォートナイトの仕掛けのドアのボリュームから出ると、ドアはロックされます。
1 つのボリュームの仕掛けをドアの中央に配置します。 詳細パネルで、以下のように仕掛けのオプションをカスタマイズします。 リストにないオプションは、デフォルト値のままにしておくことができます。
オプション
設定値
説明
ボリュームの形状
シリンダー
ボリュームの形状を決定します。
ボリュームの高さ
0.25x
これによってボリューム シリンダーの高さが決まります
ボリューム範囲
0.9x
ボリューム シリンダーの半径を設定し、仕掛け位置からの近いまたは遠い距離を決定します。 半径は比較的小さく、プレイヤーがドアに近づいてボリュームに入る必要があるようにします。
条件付きボタンの仕掛けをドアの横のロックの仕掛けの下に配置します。 下の表に従ってオプションをカスタマイズしましょう。 リストにないオプションは、デフォルト値のままにしておくことができます。
オプション
設定値
説明
キー アイテムが必要
True (オン)、1
これをチェックして、条件を渡すためにキー アイテムが必要であることを示します。 フィールドに 1 と入力することで、必要なカードキーが 1 つのみであることを示します。
キー アイテム 1
Authority Keycard (インゲーム名) または AGID_CP_Keycard_Agency (アイテム ID)
必要なアイテムを選択するには、ドロップダウンをクリックして「keycard」を検索します。 キーカード アイテムは複数ありますが、この例では「Authority Keycard」アイテムを使用します。
ユーザー オプション - 機能 で、条件付きボタンの仕掛けに次の関数を設定します。
機能
ターゲットの仕掛け
バインドするイベント
説明
アクティブ化
ボリューム
入った時
プレイヤーがフォートナイトの仕掛けのドアのボリュームに入ると、条件付きボタンがアクティブになります。 プレイヤーが Authority Keycard を持っているかどうかをチェックします。
カスタム キーカードのドアを設定する
2 番目のドアでは、次の手順に従って仕掛けを設定します。
両方のロックの仕掛けのオプションは同じであるため、最初のロックの仕掛けをコピーしてレベル内に貼り付けることができます。 最初の仕掛けと区別できるように、仕掛けの名前を変更することができます。
ユーザー オプション - 機能で、ロックの仕掛けに次の関数を設定します。
プレイヤー スポナー (このセクションへのアンカー リンク) を配置するまでこの関数を設定することはできません。
機能
ターゲットの仕掛け
バインドするイベント
説明
ロック
プレイヤー 1 スポーン パッド
プレイヤーのスポーン時
プレイヤー 1 スポーン パッドからプレイヤーがスポーンすると、ロックの仕掛けがアクティベートされ、ドアがロックされます。
両方のボリュームの仕掛けのオプションは同じであるため、最初のボリュームをコピーしてレベルにペーストすることもできます。 最初の仕掛けと区別できるように、仕掛けの名前を変更することができます。
キーカードのテーブルを設定する
次の手順に従って、テーブルにフォートナイトのキーカードとカスタムのキーカードを設定します。
仕掛けを使用するだけのロックされたドアに最も近いテーブルの側にアイテム プレーサーの仕掛けを配置します。
詳細パネルで、アイテム プレーサーの仕掛けのオプションを次のようにカスタマイズします。
オプション
設定値
説明
アイテム リスト
ザ・オーソリティのカードキー
[+] をクリックして配列要素を追加し、ドロップダウンをクリックして「keycard」を検索します。 次に Authority Keycard アイテムを選択します。
コンテンツ ブラウザでカスタム キーカード アイテムを見つけて、レベルにドラッグします。 カスタム キーカードをテーブルの上に設定した、ロックされたドアに最も近い側に配置します。
keycard_gameplay_device を作成したら (ここにアンカー リンクを追加)、コンテンツ ブラウザで Verse の仕掛けを見つけてレベルにドラッグします。
プレイヤー スポナーを設定する
最後に、プレイヤー スポナーを配置する必要があります。 この例では、1 つのプレイヤー スポナーだけが必要です。 複数のプレイヤーがいるゲームをビルドする場合、以下の手順に従ってより多くの設定を行うことができます。 また、特定の島のエクスペリエンスに基づいて別の仕掛けに設定することもできます。
プレイヤーがテーブルと 2 つのドアをすぐに目にする場所にプレイヤー スポナーを配置します。
下の表に従って、仕掛けのオプションをカスタマイズしましょう。
オプション
設定値
説明
ゲーム中に表示
False (オフ)
この例では、プレイヤー スポナーは非表示になっています。
部屋と仕掛けを設定できたので、カスタム キーカードを作成できます。
カスタム アイテム エンティティ プレハブを作成する
コンテンツ ブラウザで、右クリックしてコンテキスト メニューを開き、エンティティ プレハブ 定義を選択します。 これにより、新しいシーン グラフ エンティティ プレハブをコンテンツ ブラウザに追加します。
プレハブの名前を Item_Keycard に変更します。
新しいプレハブのインスタンスをビューポートにドラッグしてワールド内にドラッグします。 これにより、アウトライナーで選択できるようになります。
Item_Keycard プレハブを選択して、[詳細] パネルで [+ コンポーネント] をクリックして、item_component を選択します。 リストをスクロールして探すことも、検索バーに「item」と型して結果の数を制限することで、すばやく見つけることができます。
[+ コンポーネント]を再度クリックして、item_details_component を選択します。 このコンポーネントは、アイテムに関するテキスト データを格納します。
item_details コンポーネントには、[詳細] パネルに Name、Description および ShortDescription という 3 つのプロパティ フィールドが表示されます。 これらのフィールドに、名前、アイテムの説明、短い説明ラベルを入力します。
[+ コンポーネント] を再度クリックして、item_icon_component を選択します。
[詳細] パネルで item_icon_component を展開します。 2D 画像を選択する必要があります。この画像は、アイテムを表すためにゲームの UI に (プレイヤーのインベントリなどの) 表示される画像になります。
なしタイルの隣のドロップダウンをクリックしてコンテキスト メニューを開き、検索バーに画像の名前の一部を入力します。 この例では、T_Icon_Keycard.png という名前の PNG 画像を使用します。
検索結果から画像を選択します。
もう一度 + コンポーネントをクリックして、mesh_component を選択します。 この例では、平面を選択します。
これにより、平面メッシュがアイテムに追加されます。 設定によっては 最初は非常に大きな平面が表示されることがあります 平面をキーカードのサイズに合わせて変更するには、次の手順を実行します。
ビューポートの上部にあるツールバーで、スケール ツールを選択します。 R キーを押して [スケール] ツールに変更することもできます
スケール ツール のさらに右側にあるスケールのプリセット比率設定のドロップダウンをクリックします。 0.0625に設定します。 これにより、平面を非常に小さなサイズに縮小して、カードキーを表現することができます。
[+ コンポーネント] を再度クリックして、fort_item_pickup_component を選択します。 このコンポーネントを追加すると、フォートナイトのアイテムのすべての機能が追加されます。
アイテムを回収するアニメーションとアイテムをドロップするアニメーション
アイテムをインベントリに追加するためのインタラクション
プレイヤーがアイテムを見ると表示されるデフォルトのアイテム ウィジェット
アイテムが回収されると、アイテムのメッシュは無効になります
アイテムがドロップされるとアイテムのメッシュが有効になります
基本的なカスタム キーカード プレハブを作成できたので、このアイテムをユニークなものにするカスタムのコンポーネントを作成して、Verse コードでチェックして特定のロックされたドアが開くかどうかを確認できるようになります。
カスタム Verse コンポーネントを作成する
通常、多数の Verse コード ファイルがある大規模なプロジェクトの場合、カスタム コンポーネント用の新しい Verse ファイルを作成する必要があります。 それを行うには、次の手順に従います。
このチュートリアルの例は小さいため、カスタム keycard_item_component はカスタム keycard_gameplay_device 用の Verse ファイルで定義されています。 その手順については、「ゲームプレイ用の Verse コードを作成する」セクションを参照してください。
新しいキーカード アイテムを選択した状態で、[詳細] パネルで + コンポーネントをクリックして、新規 Verse コンポーネントを選択します。 Verse コンポーネントを作成ウィンドウが開きます。
Verse Explorer を使用して新しい Verse ファイルを追加することで、Verse コンポーネントを作成することもできます。
テンプレートを選択でシーン グラフ コンポーネントを選択します
下部で、コンポーネント名フィールドに keycard_item_component と入力します。 次に、作成 をクリックします。
[詳細] パネルで、+ コンポーネントをクリックし、検索バーに 「keycard」 と入力します。 新しい Verse コンポーネントがリストされているので、それを選択してカスタム キーカード アイテムに追加します。
メニュー バーで、[Verse] > [Verse Explorer] の順にクリックします。 新しい Verse コンポーネントを見つけて右クリックし、Visual Studio Code で開くを選択します。
ゲームプレイ用の Verse コードを作成する
カスタム アイテム (キーカード) を作成し、プレイヤーがインベントリにカスタム キーカードがある場合に仕掛けをトリガーするため、Verse の仕掛けを作成する必要があります。
メニュー バーから、[Verse] > [Verse Explorer] を選択します。 アウトライナーの隣にあるタブで Verse Explorer が開きます。
Verse Explorer で、プロジェクト名を右クリックして、新しい Verse ファイルをプロジェクトに追加を選択し、Verse スクリプトを作成ウィンドウを開きます。
[Verse スクリプトを作成] ウィンドウのテンプレートを選択で、Verse の仕掛けをクリックして選択します。 仕掛けの名前フィールドに、keycard_gameplay_device と入力します。 次に、作成をクリックして、Verse ファイルを作成します。
Verse Explorer 内で新しい Verse の仕掛けをダブルクリックして、Visual Studio (VS) Code でファイルを開きます。 コードの先頭行に次のすべての行が追加されていることを確認します。
Verseusing { /Fortnite.com/Devices } using { /Fortnite.com/Itemization } using { /Verse.org/Simulation } using { /Verse.org/SceneGraph } using { /Verse.org/Random } using { /UnrealEngine.com/Itemization } using { /UnrealEngine.com/Temporary/Diagnostics }次に、カスタム アイテム コンポーネントを定義するコードを追加します。
Verse# KEYCARD ITEM COMPONENT keycard_item_component := class(item_component) :以下のターゲット エージェントのルート インベントリを取得する、ヘルパー関数を追加できます。
Verse# Helper function that gets the first descendant inventory component from an agent. # This will be the root inventory. GetAgentInventory(Agent:agent)<decides><transacts>:inventory_component= TargetInventory := (for (I : Agent.FindDescendantComponents(inventory_component)) { I })[0]次に、カスタムの Verse の仕掛けを
creative_deviceのサブクラスとして定義します。 その下で、ボリュームの仕掛けとロックの仕掛け用の編集可能なプロパティを設定します。 これにより、エディタ内のボリュームまたはロックの仕掛けの特定のインスタンスを選択できます (2 つのボリュームの仕掛けと 2 つのロックの仕掛けがあるため、重要です)。Verse# DEVICE //// GAMEPLAY keycard_gameplay_device := class(creative_device) : # Use a volume_device to be able to check when a player approaches @editable VolumeDevice:?volume_device = false # The lock device is attached to a wall/door prop. This can be activated to lock/unlock the door it is attached to. @editable LockDevice:?lock_device = false次に、クエリを使用してボリュームの仕掛けがあるかどうかを確認し、ボリュームの仕掛けのエージェントの入場時イベントとエージェントの出場時イベントをサブスクライブします。
Verse# Subscribe to the entry and exit events on the Volume to determine when a player/agent approaches. OnBegin<override>()<suspends>:void= if: TargetVolume := VolumeDevice? then: TargetVolume.AgentEntersEvent.Subscribe(OnAgentEntersEvent) TargetVolume.AgentExitsEvent.Subscribe(OnAgentExitsEvent)プレイヤーのインベントリをチェックして、インベントリにカスタム キーカードがあるかどうかを確認したいとします。 これは、
keycard_item_componentを持つものをチェックすることで行います。 このコードでは、ロックの仕掛けを開くためにkeycard_item_componentが存在する必要もあります。VerseOnAgentEntersEvent(Agent:agent):void= # Get the inventory from the player that is entering. if(TargetInventory := GetAgentInventory[Agent]): # Check the item in the inventory, if it has the keycard_item_component, proceed for(item : TargetInventory.FindItems(), KeycardComponent := item.GetComponent[keycard_item_component]) # If there is a valid lock_device, then this opens the door. if(TargetDoorLock := LockDevice?):最後に、複数のプレイヤーがいて、1 人のプレイヤーがカードキーを持っている場合、このコードはロックが開いたままであることを確認します。 カードキーを持っているプレイヤーがボリュームから出ると、ロックは再び閉じます。
VerseOnAgentExitsEvent(Agent:agent):void= # Start by assuming that no one has the required keycard_item_component. var AgentWithKeycardInVolume:logic = false if(TargetVolume := VolumeDevice?): # Get the Agents that are inside the volume_device as an array. for(TargetAgent:TargetVolume.GetAgentsInVolume()): # Use the same check to see if any of the agents in the volume_device have a keycard_item_component.
これは完全な Verse コードのスニペットです。
using { /Fortnite.com/Devices }
using { /Fortnite.com/Itemization }
using { /Verse.org/Simulation }
using { /Verse.org/SceneGraph }
using { /UnrealEngine.com/Itemization }
using { /UnrealEngine.com/Temporary/Diagnostics }
# KEYCARD ITEM COMPONENT
keycard_item_component := class(item_component) :