前提条件
初めてペルソナを作成し、プロンプト エディタでペルソナとインタラクトすることでそのパーソナリティを調整したので、NPC を会話に追加できます。 ゲーム内で NPC と会話するには、次の操作を行う必要があります。
Verse で新しい
npc_behaviorを定義する。npc_behaviorを NPC キャラクター定義に追加する。NPC キャラクター定義を NPC スポナーに追加する。
ペルソナ NPC と会話するにはボイス チャットが必要であるため、ボイス チャットを有効にしていることを確認する。
空の NPC の挙動を作成する
Verse でカスタム NPC の挙動を設定するには、次の手順を実行します。
メニュー バーで、[Verse] > [Verse Explorer] の順に選択します。
Verse Explorer で、プロジェクト名を右クリックして、新しい Verse ファイルをプロジェクトに追加を選択し、Verse スクリプトを作成ウィンドウを開きます。
[Create Verse Script (Verse スクリプトを作成)] ウィンドウで、テンプレートとして選択するために [NPC Behavior Basic (NPC の挙動基本)] をクリックします。
[Configure (構成)] で [NPC Behavior (NPC の挙動)] に 「persona_npc_behavior」 という名前を付けます。
[Create (作成)]を選択して Verse ファイルを作成します。
[NPC Behavior (NPC の挙動)] を選択し、[NPC Behavior Basic (NPC の挙動基本)] ではなく、persona_npc_behavior の [Create (作成)] を選択すると、作成された Verse ファイルには、既存の機能がある定義済みの npc_behavior が含まれます。この機能は、ここで説明する動作に置き換える必要があります。 このチュートリアルでは、使用できる完全な npc_behavior Verse スクリプトを提供します。そのため、スクリプトには必要なものが全て含まれているため、[NPC Behavior Basic (NPC の挙動基本)] を選択し、[Create (作成)] または [Create Empty (空で作成)] をクリックしても問題ありません。
persona_npc_behavior では、Verse を通じて NPC に persona_component を定義して追加できます。 NPC スポナーによってスポーンされた全ての NPC はエージェントであり、関連付けられたエンティティがあります。 この関連付けられたエンティティによって、persona_component などのシーン グラフ コンポーネントを NPC エージェントに追加できます。
ペルソナ モディファイアが NPC に追加されると、persona_component が自動的に追加されます。
NPC の挙動は、ベースの npc_behavior クラスを継承して Verse で定義されます。 NPC の挙動について詳しくは、「NPC の挙動を理解する」のページを参照してください。
ペルソナ NPC の挙動を編集する
プレイヤーの会話のターゲットとして NPC ペルソナを追加するには、Verse が必要です。 プレイヤーの会話ターゲットとして NPC を追加しないと、NPC ペルソナと会話できません。
以下のセクションでは、Verse スクリプトは persona_npc_behavior を定義します。 この Verse コードを空の persona_npc_behavior に追加するには、次の手順を実行します。
メニュー バーで、[Verse] > [Open Project in VS Code… (VS Code でプロジェクトを開く…)] を選択します。
VS Code が開いたら、VS Code Explorer で
persona_npc_behavior.verseファイルを見つけます。以下の
persona_npc_behavior.verseの内容をコピーして、プロジェクトの Verse ファイルに貼り付けます。Verse コードを UEFN のツールバー、または VS Code 内でコンパイルします。
Verse を使用して、プレイヤーのチームが LLM エージェントとインタラクトする体験を作成することもできます。 Verse は、CreateAudioTeamAndAddPlayers()、AddMember()、および AddChatChannel() を使用して、複数のプレイヤーと LLM エージェント間のインタラクションを処理します。
Verse スクリプトの順を追ったウォークスルーについては、スクリプトの説明のステップに従ってください。
persona_npc_behavior.verse
using { /Fortnite.com/AI }
using { /Fortnite.com/Devices }
using { /Fortnite.com/Playspaces }
using { /UnrealEngine.com/Conversations }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Chat }
using { /Verse.org/SceneGraph }
using { /Verse.org/Simulation }
スクリプトの説明
TeamNameは、作成されるボイス チャンネルの名前です。OptionAgentGroupは、ボイス チャンネル (TeamName) に参加するエージェントのグループを保持します。OptionVoiceChannelは、プレイヤーと NPC がいる実際のボイス チャンネルの変数です。Verse#Team name for the Team Voice Channel we are creating. TeamName<localizes>:message = "Persona Chat" #Variable that stores the agent group we are using to create the voice channel. We can use this group to create new channels or get current players in a conversation. var OptionAgentGroup:?agent_group(team_member_info) = false #Variable that stores the Voice Channel that our players and NPC will be inside of. This is what actually holds the conversation. var OptionVoiceChannel:?voice_channel(team_member_info) = falseAddPlayersAsConversationTargetは、NPC とそのプレイ空間内の全てのプレイヤーとの間でライブ音声会話を設定します。 この機能はまず、必要なものを全て収集し、それらが全て成功した場合にのみ、エージェント グループとボイス チャンネルをビルドし、プレイヤーと NPC をそれらに接続し、プレイヤーを会話ターゲットとして登録します。まず、
team_member_infoで型指定された新しいagent_groupを作成します。これは、会話の参加者全てを保持します。 次に、voice_channel を作成し (これもteam_member_infoで型指定されます)、TeamNameで名前を付け、先ほど作成したエージェント グループでそのグループを指定します。 このチャンネルが会話のオーディオを伝達します。次に、グループを取り込みます。プレイ空間内の全てのプレイヤーをループし、それぞれをメンバーとして追加した後、NPC エージェントも追加して、全ての参加者が 1 つのグループを共有するようにします。
その後、
SimEntity.AddChatChannel(TeamVoiceChannel)を呼び出して、音声チャット システムにボイス チャンネルを登録し、チャンネルをオンラインにします。 最後に、再びプレイヤーをループし、それぞれに対してSetConversationTargetを呼び出し、そのチャンネルを通じて NPC のpersona_componentに向けられるようにします。最後のステップでは、グループとチャンネルを
OptionAgentGroupおよびOptionVoiceChannel変数に格納します (option{}でラップされます)。これにより、後でヘルパー関数が会話を再構築せずに参照または変更できるようになります。Verse# Add the Player as a conversation target for this NPC AddPlayersAsConversationTarget():void= if: NPCEntity := GetEntity[] Playspace := NPCEntity.GetPlayspaceForEntity[] NPCAgent := GetAgent[] Players := NPCEntity.GetPlayspaceForEntity[].GetPlayers() SimEntity := Players[0].GetSimulationEntity[] PersonaComponent := NPCEntity.GetComponent[persona_component]RemovePlayerAsConversationTargetは、NPC の会話から 1 人のプレイヤーを削除します。 1 つのプレイヤー引数を取り、ClearConversationTarget()を呼び出します。これにより、そのプレイヤーは、それまで向けられていた会話ターゲットから分離されます(AddPlayersAsConversationTargetで行われたSetConversationTarget呼び出しの逆です)。Verse# Remove Player as a conversation target RemovePlayerAsConversationTarget(Player:player):void= Player.ClearConversationTarget() Logger.Print("Removed from NPC conversation", ?Level := log_level.Debug)OnBeginは、セッションに構造的出力を追加し、プレイヤーを会話ターゲットとして設定します。 プレイヤーが途中から参加できるゲームでは、PlayerAddedEventで追加するか、プレイヤーがトリガーを介して NPC に近づいたときに、プレイヤーを確実に追加してください。VerseOnBegin<override>()<suspends>:void= AddPlayersAsConversationTarget()OnEndでは、Conversationがクリーンされ、全てのプレイヤーから削除されます。 これは良い習慣です。VerseOnEnd<override>():void= for (Player : GetEntity[].GetPlayspaceForEntity[].GetPlayers()): RemovePlayerAsConversationTarget(Player)
NPC キャラクター定義に NPC の挙動を追加する
persona_npc_behavior を NPC キャラクター定義に追加するには、次の手順を実行します。
[Content Drawer (コンテンツ ドロワー)] で PersonaNPCDefinition に移動します。
PersonaNPCDefinition を選択して編集用に開きます。
[NPC Character Behavior (NPC キャラクターの挙動)] で、[Verse Behavior (Verse 動作)] > persona_npc_behavior を選択します。
タブを閉じる前に、[NPC Character Definition (NPC キャラクター定義)] への変更を保存してください。
NPC キャラクター定義が NPC スポーナーに追加されると、NPC ペルソナはプレイヤーの会話ターゲットとして自動的に追加されます。
NPC キャラクター定義を使用して NPC スポナーを追加する
カスタマイズされたペルソナで NPC をスポーンするには、レベルに NPC スポーナー を追加し、PersonaNPCDefinition を追加する必要があります。 NPC スポナーの仕掛けを追加するには、コンテンツ ドロワーから PersonaNPCDefinition をビューポートにドラッグします。
NPC と会話する
NPC と会話するには、セッションを起動してゲームを開始します。 オンスクリーンで表示されている入力デバイスのキーまたはボタンを押して、NPC と会話しましょう!