Ön Gereksinimler
Artık ilk personanı oluşturup İstem Editör’ünde onunla etkileşim kurarak onun kişiliğinde gereken ayarlamaları yaptığına göre NPC’ni bir konuşmaya ekleyebilirsin. Oyun içinde bir NPC ile konuşmak için şunları yapmalısın:
Verse’te yeni bir
npc_behaviortanımla.npc_behavior’ını NPC karakter tanımına ekle.NPC karakter tanımını bir Karakter Çıkma Yeri’ne ekle.
Persona NPC’lerle konuşmak için sesli sohbet gerekli olduğundan sesli sohbetin etkin olduğundan emin ol.
Boş Bir NPC Davranışı Oluştur
Verse’te özel bir NPC davranışı ayarlamak için şu adımları izle:
Menü çubuğunda, Verse > Verse Gezgini’ni seç.
Verse Gezgini’nde projenin adına sağ tıkla ve Projeye yeni Verse dosyası ekle’yi seçerek Verse Kodu Oluştur penceresini aç.
Verse Kodu Oluştur penceresinde NPC Davranış Temeli’ne tıklayarak onu şablon olarak seç.
Yapılandır altında NPC davranışını persona_npc_behavior olarak adlandır.
Verse dosyanı oluşturmak için Oluştur’a tıkla.
NPC Davranışı Temelleri yerine NPC Davranışı’nı seçersen ve persona_npc_behavior’ın için Oluştur’u seçersen oluşturulan Verse dosyası, burada açıklanan davranışlarla değiştirmen gereken, mevcut işlevselliğe sahip önceden tanımlanmış bir npc_behavior içerir. Bu eğitim, kullanabileceğin eksiksiz bir npc_behavior Verse kodu sağlar, böylece kod ihtiyacın olan her şeyi sağladığı için NPC Davranışı Temellerini’ni Oluştur veya Boş Oluştur ile seçmen konusunda güvenlik açısından hiçbir sakınca yoktur.
persona_npc_behavior, Verse aracılığıyla bir persona_component tanımlayabileceğin ve bunu NPC’ne ekleyebileceğin yerdir. Karakter Çıkma Yerleri tarafından çıkarılan tüm NPC’ler aracılardır ve ilişkili bir varlığa sahiptirler. Bu ilişkili varlık, persona_component gibi Scene Graph bileşenlerini bir NPC aracısına eklemeni sağlar.
Bir NPC’ye bir persona değiştiricisi eklendiğinde, persona_component otomatik olarak eklenir.
NPC davranışları Verse’te, temel npc_behavior sınıfından devralınma yoluyla tanımlanır. NPC davranışları hakkında daha fazla bilgi için NPC Davranışlarını Anlama sayfasına göz at.
Persona NPC Davranışını Düzenle
NPC personanı oyuncu için bir konuşma hedefi olarak eklemek için Verse gereklidir. NPC’ni oyuncun için bir konuşma hedefi olarak eklemeden NPC personanla konuşamazsın.
Aşağıdaki bölümlerde Verse kodu, persona_npc_behavior’ı tanımlar. Bu Verse kodunu boş persona_npc_behavior’ına eklemek için şu adımları izle:
Menü çubuğunda Verse > Projeyi VS Code’da Aç…’ı seç.
VS Code açıldığında, VS Code Gezgini’nde
persona_npc_behavior.versedosyanı bul.Aşağıdaki
persona_npc_behavior.verse’ün içeriğini kopyalayıp projendeki Verse dosyana yapıştır.Verse kodunu UEFN Araç Çubuğu’nda veya VS Code’da derle.
Verse’ü, bir oyuncu takımının LLM aracılarıyla etkileşimde bulunduğu deneyimler oluşturmak için de kullanabilirsiniz. Verse, birden fazla oyuncu ile LLM aracıları arasındaki etkileşimleri, CreateAudioTeamAndAddPlayers()’ı, AddMember()’ı ve AddChatChannel()’ı kullanarak yönetir.
Verse kodunun adım adım anlatımı için Kod Açıklaması altındaki adımları izle.
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 }
Kod Açıklaması
TeamNameoluşturulmakta olan ses kanalının adıdır.OptionAgentGroupses kanalına (TeamName) gidecek aracı grubunu tutar.OptionVoiceChannel, oyuncuların ve NPC’nin içinde bulunduğu fiili ses kanalının değişkenidir.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) = falseAddPlayersAsConversationTargetise NPC ile onun oyun alanındaki her oyuncu arasında canlı bir sesli konuşma kurar. Fonksiyon öncelikle ihtiyaç duyduğu her şeyi toplar ve ancak bunların hepsinin başarılı olması durumunda aracı grubunu ve ses kanalını oluşturur, oyuncuları ve NPC’yi bunlara bağlar ve oyuncuları konuşma hedefleri olarak kaydeder.Öncelikle konuşmadaki herkesi barındıran
team_member_infoile yazılmış yeni biragent_groupoluşturur. Daha sonra bir voice_channel (o dateam_member_infoile yazılmıştır) oluşturarak onuTeamNameolarak adlandırır ve onun grubunu yeni oluşturulan aracı grubuna yönlendirir. Konuşma sesini taşıyan şey, bu kanaldır.Ardından grubu doldurur; oyun alanındaki her oyuncuyu döngüden geçirir ve her birini üye olarak ekler, sonra NPC aracısını da ekler, böylece tüm katılımcılar tek bir grubu paylaşır.
Daha sonra ses kanalını sesli sohbet sistemine kaydetmek için
SimEntity.AddChatChannel(TeamVoiceChannel)’ı çağırır ve bu da kanalı çevrimiçi hale getirir. Son olarak, oyuncuları tekrar döngüden geçirir ve her birindeSetConversationTarget’ı çağırarak onların bu kanal aracılığıyla NPC’ninpersona_component’ına yönlendirilmesini sağlar.Son adımda grup ve kanal,
OptionAgentGroupileOptionVoiceChanneldeğişkenlerinde (option{}içine sarılmış) depolanır, böylece sonraki yardımcı fonksiyonlar konuşmayı yeniden oluşturmak zorunda kalmadan ona referans verebilir veya onu değiştirebilir.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’nin konuşmasından tek bir oyuncuyu kaldırır. Bir tane oyuncu bağımsız değişkenini alır ve bu oyuncuyu, yönlendirildiği konuşma hedefinden ayıranClearConversationTarget()’ı (AddPlayersAsConversationTargetiçinde yapılanSetConversationTarget’ın tersidir) çağırır.Verse# Remove Player as a conversation target RemovePlayerAsConversationTarget(Player:player):void= Player.ClearConversationTarget() Logger.Print("Removed from NPC conversation", ?Level := log_level.Debug)OnBegin, yapılandırılmış çıktıyı oturuma ekler ve oyuncuyu konuşma hedefi olarak ayarlar. Oyuncuların geç katılabileceği bir oyunda, onlarıPlayerAddedEvent’te veya bir oyuncu bir tetikleyici aracılığıyla bir NPC'ye yaklaştığında eklediğinden emin olman uygun olacaktır.VerseOnBegin<override>()<suspends>:void= AddPlayersAsConversationTarget()OnEndiçindeKonuşmatemizlenir ve tüm oyunculardan kaldırılır. Bu, iyi bir uygulamadır.VerseOnEnd<override>():void= for (Player : GetEntity[].GetPlayspaceForEntity[].GetPlayers()): RemovePlayerAsConversationTarget(Player)
NPC Karakter Tanımına NPC Davranışı Ekle
persona_npc_behavior’ını NPC karakter tanımına eklemek için şu adımları izle:
İçerik Çekmecesi’nde PersonaNPCDefinition’ına git.
Düzenlemek üzere açmak için PersonaNPCDefinition’ı seç.
NPC Karakter Davranışı altında Verse Davranışı > persona_npc_behavior’ı seç.
Sekmeyi kapatmadan önce NPC Karakter Tanımı’nda yaptığın değişiklikleri kaydettiğinden emin ol.
NPC karakter tanımın bir Karakter Çıkma Yeri’ne eklendiğinde NPC personan otomatik olarak oyuncun için bir konuşma hedefi olarak eklenir.
NPC Karakter Tanımı ile Karakter Çıkma Yeri Ekle
Özelleştirilmiş personana sahip bir NPC çıkarmak için bölümüne bir Karakter Çıkma Yeri eklemeli ve PersonaNPCDefinition’ını eklemelisin. Bir Karakter Çıkma Yeri Cihazı eklemek için PersonaNPCDefinition’ını İçerik Çekmecesi’nden Görünüm Penceresi’ne sürükle.
NPC’nle Konuş
NPC’nle konuşmak için bir oturum aç ve oyunu başlat. Girdi cihazında ekranda belirtilen tuşa veya düğmeye bas ve NPC’nle konuş!