Conditions préalables
Maintenant que vous avez créé votre première Persona et affiné sa personnalité en interagissant avec elle dans l'Éditeur d'invites, vous pouvez ajouter votre PNJ à une conversation. Pour converser avec un PNJ en jeu, vous devez :
Définir un nouveau
npc_behaviordans Verse.Ajouter votre
npc_behaviorà votre définition de personnage PNJ.Ajouter votre définition de personnage PNJ à un générateur de PNJ.
Vérifiez que la discussion vocale est activée, car elle est indispensable pour converser avec les PNJ dotés d'une Persona.
Créer un comportement de PNJ vide
Pour configurer un comportement de PNJ personnalisé dans Verse, procédez comme suit :
Dans la barre de menus, sélectionnez Verse > Explorateur Verse.
Dans l'Explorateur Verse, effectuez un clic droit sur le nom de votre projet, puis choisissez Ajouter un nouveau fichier Verse au projet pour ouvrir la fenêtre Créer un script Verse.
Dans la fenêtre Créer un script Verse, cliquez sur Comportement de PNJ de base pour l'utiliser comme modèle.
Nommez le comportement de PNJ persona_npc_behavior sous Configurer.
Sélectionnez Créer pour créer votre fichier Verse.
Si vous sélectionnez Comportement de PNJ plutôt que Comportement de PNJ de base, puis Créer pour persona_npc_behavior, le fichier Verse créé contient un npc_behavior prédéfini avec des fonctionnalités que vous devez remplacer par les comportements présentés ici. Ce tutoriel fournit un script Verse npc_behavior complet. Vous pouvez donc sélectionner Comportement de PNJ de base, puis Créer ou Créer vide, puisque le script contient tout le nécessaire.
C'est dans persona_npc_behavior que vous pouvez définir et ajouter un persona_component à votre PNJ avec Verse. Tous les PNJ que font apparaître les générateurs de PNJ sont des agents et possèdent une entité associée. Cette entité associée vous permet d'ajouter des composants du graphe de scène, tels que persona_component, à un agent PNJ.
persona_component est ajouté automatiquement quand un modificateur de Persona est ajouté à un PNJ.
Les comportements de PNJ sont définis dans Verse par héritage de la classe de base npc_behavior. Pour en savoir plus sur les comportements de PNJ, consultez la page Comprendre les comportements de PNJ.
Modifier le comportement de la Persona du PNJ
Verse est nécessaire pour faire de la Persona de votre PNJ une cible de conversation pour le joueur. Si vous n'ajoutez pas votre PNJ comme cible de conversation, le joueur ne peut pas converser avec sa Persona.
Dans les sections suivantes, le script Verse définit persona_npc_behavior. Pour ajouter ce code Verse à votre persona_npc_behavior vide, procédez comme suit :
Dans la barre de menus, sélectionnez Verse > Ouvrir le projet dans VS Code…
Une fois VS Code ouvert, recherchez votre fichier
persona_npc_behavior.versedans l'Explorateur VS Code.Copiez le contenu du fichier
persona_npc_behavior.verseci-dessous et collez-le dans le fichier Verse de votre projet.Compilez votre code Verse depuis la barre d'outils de l'UEFN ou dans VS Code.
Vous pouvez également utiliser Verse pour créer des expériences dans lesquelles une équipe de joueurs interagit avec des agents LLM. Verse gère les interactions entre plusieurs joueurs et les agents LLM à l'aide de CreateAudioTeamAndAddPlayers(), AddMember() et AddChatChannel().
Pour une démonstration pas-à-pas du script Verse, consultez Explication du script.
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 }
Explication du script
La variable
TeamNamecontient le nom du canal vocal créé.OptionAgentGroupcontient le groupe d'agents qui rejoint ce canal (TeamName). La variableOptionVoiceChannelcontient le canal vocal auquel appartiennent les joueurs et le PNJ.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) = falseLa fonction
AddPlayersAsConversationTargetétablit une conversation vocale en direct entre le PNJ et chaque joueur de son espace de jeu. La fonction commence par réunir toutes les données nécessaires. Ce n'est que si toutes ces opérations réussissent qu'elle crée le groupe d'agents et le canal vocal, y associe les joueurs et le PNJ, puis enregistre les joueurs comme cibles de conversation.Elle crée d'abord un
agent_groupde typeteam_member_info, qui contient tous les participants à la conversation. Elle crée ensuite un voice_channel, également de typeteam_member_info, le nommeTeamNameet fait pointer sa propriété Group vers le groupe d'agents qui vient d'être créé. Ce canal transporte le son de la conversation.Elle remplit ensuite le groupe : elle parcourt tous les joueurs de l'espace de jeu et les ajoute comme membres, puis ajoute également l'agent PNJ. Tous les participants appartiennent ainsi au même groupe.
Elle appelle ensuite
SimEntity.AddChatChannel(TeamVoiceChannel)pour enregistrer le canal vocal dans le système de discussion audio, ce qui active le canal. Enfin, elle parcourt de nouveau les joueurs et appelleSetConversationTargetpour chacun, afin de les diriger vers lepersona_componentdu PNJ par ce canal.La dernière étape stocke le groupe et le canal dans les variables
OptionAgentGroupetOptionVoiceChannel, encapsulées dansoption{}. Les fonctions auxiliaires peuvent ainsi consulter ou modifier ultérieurement la conversation sans la reconstruire.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]La fonction
RemovePlayerAsConversationTargetretire un joueur de la conversation avec le PNJ. La fonction reçoit un joueur comme argument et appelleClearConversationTarget(), ce qui dissocie ce joueur de sa cible de conversation actuelle. Il s'agit de l'opération inverse de l'appelSetConversationTargeteffectué dansAddPlayersAsConversationTarget.Verse# Remove Player as a conversation target RemovePlayerAsConversationTarget(Player:player):void= Player.ClearConversationTarget() Logger.Print("Removed from NPC conversation", ?Level := log_level.Debug)OnBeginajoute la sortie structurée à la session et définit le joueur comme cible de la conversation. Dans une partie où des joueurs peuvent arriver en cours de jeu, veillez à les ajouter lors dePlayerAddedEventou lorsqu'un joueur s'approche d'un PNJ en passant par un déclencheur.VerseOnBegin<override>()<suspends>:void= AddPlayersAsConversationTarget()Dans
OnEnd,Conversationest nettoyée et supprimée pour tous les joueurs. Il s'agit d'une bonne pratique.VerseOnEnd<override>():void= for (Player : GetEntity[].GetPlayspaceForEntity[].GetPlayers()): RemovePlayerAsConversationTarget(Player)
Ajouter un comportement de PNJ à une définition de personnage PNJ
Pour ajouter persona_npc_behavior à votre définition de personnage PNJ, procédez comme suit :
Accédez à PersonaNPCDefinition dans le Tiroir à contenu.
Sélectionnez PersonaNPCDefinition pour l'ouvrir dans l'éditeur.
Sous Comportement de personnage PNJ, sélectionnez Comportement Verse > persona_npc_behavior.
Veillez à enregistrer les modifications apportées à votre définition de personnage PNJ avant de fermer l'onglet.
Une fois votre définition de personnage PNJ ajoutée à un générateur de PNJ, la Persona du PNJ est automatiquement ajoutée comme cible de conversation pour le joueur.
Ajouter un générateur de PNJ avec une définition de personnage PNJ
Pour faire apparaître un PNJ doté de votre Persona personnalisée, ajoutez un générateur de PNJ au niveau, puis ajoutez-y PersonaNPCDefinition. Pour ajouter un appareil Générateur de PNJ, faites glisser PersonaNPCDefinition du Tiroir à contenu dans le Hublot.
Converser avec votre PNJ
Pour converser avec votre PNJ, lancez une session et démarrez la partie. Appuyez sur la touche ou le bouton indiqué à l'écran pour votre périphérique d'entrée, puis conversez avec votre PNJ.