전제조건
이제 첫 번째 페르소나를 만들고 프롬프트 편집기에서 상호작용으로 성격을 다듬었으므로 NPC를 대화에 추가할 수 있습니다. 게임 내 NPC와 대화하려면 다음 조건을 충족해야 합니다.
Verse에서 새로운
npc_behavior를 정의합니다.NPC 캐릭터 정의에
npc_behavior를 추가합니다.NPC 생성 장치에 NPC 캐릭터 정의를 추가합니다.
페르소나 NPC와 대화하려면 음성 채팅이 필요하므로 음성 채팅이 활성화되어 있는지 확인합니다.
빈 NPC 비헤이비어 생성
Verse에서 커스텀 NPC 비헤이비어를 설정하려면 다음 단계를 따릅니다.
메뉴 바에서 Verse > Verse 익스플로러(Verse Explorer)를 선택합니다.
Verse 익스플로러에서 프로젝트 이름을 우클릭하고 프로젝트에 새로운 Verse 파일 추가(Add new Verse file to project)를 선택하여 Verse 스크립트 생성(Create Verse Script) 창을 엽니다.
Verse 스크립트 생성 창에서 NPC 비헤이비어 기본(NPC Behavior Basic)을 클릭하여 템플릿으로 선택합니다.
구성(Configure)에서 NPC 비헤이비어의 이름을 persona_npc_behavior로 지정합니다.
생성(Create)을 선택하면 Verse 파일이 생성됩니다.
NPC 비헤이비어 기본 대신 NPC 비헤이비어를 선택하고, persona_npc_behavior에 대해 생성을 선택할 경우, 생성된 Verse 파일에는 기존 기능이 있는 사전 정의된 npc_behavior가 포함됩니다. 이는 여기에 설명된 비헤이비어로 교체해야 합니다. 이 튜토리얼에서는 전체 npc_behavior Verse 스크립트를 사용할 수 있도록 제공하며, 스크립트에 필요한 모든 기능이 포함되어 있으므로 NPC 비헤이비어 기본을 생성 또는 빈 템플릿 생성으로 선택할 수 있습니다.
persona_npc_behavior에서 Verse를 통해 NPC에 persona_component를 정의하고 추가할 수 있습니다. NPC 생성 장치로 생성된 모든 NPC는 agents이며, 관련 entity를 가지고 있습니다. 이 관련 entity를 사용하면 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 > VS Code에서 프로젝트 열기…(Open Project in VS Code…)를 선택합니다.
VS Code가 열리면 VS Code 탐색기(VS Code Explorer)에서
persona_npc_behavior.verse파일을 찾습니다.아래
persona_npc_behavior.verse의 내용을 복사하여 프로젝트의 Verse 파일에 붙여넣습니다.UEFN 툴바 또는 VS Code 내에서 Verse 코드를 컴파일합니다.
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을 생성합니다. 이후 음성 채널을 생성하고(또한team_member_info로 유형 지정),TeamName으로 명명하며, 해당 그룹이 방금 생성한 에이전트 그룹을 가리키도록 합니다. 이 채널은 대화 오디오를 전달합니다.다음으로 그룹을 채웁니다. 함수는 플레이 공간에 있는 모든 플레이어를 순회하며 각 플레이어를 구성원으로 추가하고, NPC 에이전트도 추가하여 모든 참가자가 하나의 그룹을 공유하도록 합니다.
그런 다음
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 대화에서 단일 플레이어를 제거합니다. 이 함수는 플레이어 인수를 하나 받아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 비헤이비어 추가하기
NPC 캐릭터 정의에 persona_npc_behavior를 추가하려면 다음 단계를 따릅니다.
콘텐츠 드로어에서 PersonaNPCDefinition으로 이동합니다.
편집을 위해 PersonaNPCDefinition을 선택하여 엽니다.
NPC 캐릭터 비헤이비어에서 Verse 비헤이비어 > persona_npc_behavior를 선택합니다.
탭을 닫기 전에 NPC 캐릭터 정의 변경 사항을 저장해야 합니다.
NPC 캐릭터 정의를 NPC 생성 장치에 추가하면, 해당 NPC 캐릭터가 플레이어의 대화 상대로 자동 추가됩니다.
NPC 캐릭터 정의와 함께 NPC 생성 장치 추가하기
커스텀 페르소나를 가진 NPC를 생성하려면 레벨에 NPC 생성 장치를 추가하고 PersonaNPCDefinition을 추가해야 합니다. NPC 생성 장치를 추가하려면, PersonaNPCDefinition를 콘텐츠 드로어에서 뷰포트로 드래그합니다.
NPC와 대화하기
NPC와 대화하려면 세션을 시작하고 게임을 시작하세요. 화면에 표시된 입력 장치의 키 또는 버튼을 누르면 NPC와 대화할 수 있습니다!