3B sesi 3B uzayındaki belirli bir konumdan yayılan yönlü bir ses, ses yayıcı ve dinleyici arasındaki mesafe ve yönelime bağlı olarak hacmi artırıyor veya azaltıyor.Bu, dinleyicilerin veya yayıncıların çevrede hareket etmesiyle birlikte, oyuncuların farklı yönlerden ve ses seviyelerinden bu sesi dinamik olarak duyabilmesini sağlar.
Zencefilli Ekmek Evi - Başlangıç dosyasını başlangıç yeri olarak ve Zencefilli Ekmek Evi - Tamamlanmış Ses Dosyası referans olarak kullanarak, bu eğitim size deneyimlerinize hem döngüsel hem de bir atış 3D ses eklemek nasıl gösterir, şunlar dahil olmak üzere rehberlik:
- Oyuncular sunucuya bağlandığında çalan çevresel sesleri döngüsel olarak çalmak.
- Oyuncuları oynanışdeneyimleri için önemli olan anahtar durum olayları hakkında bilgilendirmek için ses tetikleniyor.
- Oyuncuların 3B nesnelerle etkileşim kurduğunda oyuncu geri bildirimi sağlamak için sesi etkinleştirme.
- Oyuncuları çevrelerindeki ilgi alanlarına yönlendiren ve yönlendiren karakter ses parçaları çalmak.
Herhangi bir noktada süreçte sıkışırsanız, ilerlemenizi karşılaştırmak için Zencefilli Ekmek Evi - Tamamlanmış Ses referans olarak kullanabilirsiniz.
Ses objeleri
Yönlü ses oluşturmak için, bu eğitim boyunca çalışacağınız ses nesnelerini anlamak önemlidir.Altı ana ses nesnesi türü vardır:
- The AudioPlayer nesnesi yüklenir ve ses dosyasını oynatır .
- The AudioEmitter nesnesi, 3D çevreye ses yayan bir sanal konuşmacıdır .
- The AudioListener nesnesi, 3D çevreden ses alan bir sanal mikrofon dır.
- The AudioDeviceOutput nesnesi, konuşmacı veya kulaklıklar gibi gerçek dünyadaki bir fiziksel donanım cihazı dır.
- The AudioDeviceInput nesnesi, gerçek dünyada bir fiziksel mikrofon dır.
- Wires bir nesneden diğerine ses akışlarını taşır.
Tüm bu ses nesneleri, gerçek dünyadaki karşılıkları gibi ses çıkarmak için birlikte çalışır.Bir oyuncunun kulaklık takarak deneyim oynarken giydiği bir örnek kullanarak pratikte nasıl çalıştığına bir göz atalım:
- The AudioPlayer yağmur izi için deneyime 1516791621 ses özünü ID'sini yükler.
- The AudioEmitter 3B çevreye yağmur izi ses akışı yayınlar.
- Bir akışı 'den çıkar ve akış 3B konuşmacıdan çıkar, böylece akış 3B hoparlörçıkar
- Karakterin çocuğu AudioListener nesne, 3B çevredeki bu sesi dinler ve kulaklıklarına geri besler.
- The AudioDeviceOutput nesnesi sesi AudioListener 'den oyuncunun fiziksel hoparlörüne veya bu durumda kulaklıklarına taşır.
- The AudioDeviceInput nesnesi gerçek dünyadan ses yakalar ve sesi sesli sohbetsohbeti için deneyime geri besler.


Aşağıdaki bölümler daha derin dalıyor ve her iki döngü ve bir atış 3B ses çalmayı öğrendikçe bu nesneleri referans olarak alıyor.Bu nesneleri yaklaşan tekniklerle inceleyerek, deneyimden oyuncuya sesi nasıl yakalayıp besleyeceğinizi daha doğru bir şekilde tahmin edebilirsiniz ve tersine.
Ses döngüsü Looping ses
3B sesi döngüsel olarak yeniden oynatma veya oyuncular sunucuya bağlandığında sorunsuz bir şekilde tekrarlayan yönlü ses, 3B uzayın atmosferini canlandırmak ve dinamik hale getirmek için yaygın bir ses tasarım tekniğidir.Ayrıca, 3B ses döngüsü çevresel ses kaynaklarınızı tutarlı tutar, örneğin bir televizyonun statik veya bir su şelalesinin gürültüsü; bu sesler aniden durursa, çevre gerçekçi hissetmez.
Bu konsepti göstermek için, aşağıdaki 3B sesin iki büyük kaskadın durduğunu nasıl incelediğinizi gözden geçirin, unlooped ses parçası tamamlandığında.Suyun başlangıçta oyuncuları dış çevreye sokmasına rağmen, ani işitme değişimi gerçek dünyada bir suyun davranışını nasıl etkilediğine ilişkin doğal olmayan ve sarsıntılıdır.
Benzer şekilde, örnek bu tekniği akışta çikolata şelalesi için kullanır ve oyuncunun ses yayıncısından uzaklığına göre hacmini ayarlar.Oyuncu 20 milimetreden az uzakta olduğunda, yayıcı sesi tüm hızda yayar.Oyuncu daha da uzaklaştıkça, sloshing sesi ses yayıcıdan her 20 mil uzakta azalır.Bu, kaynakolan uzaklığınız arttıkça azalan gerçek dünya sesini taklit eder.
Örnek Zencefilli Ekmek Evi - Tamamlanmış Ses Dosyası yerinde döngü 3B sesi yeniden oluşturmak için:
Oyuncu karakterinize bağlı varsayılan bir dinleyici etkinleştirin.
- Gezgini penceresinde, Ses Hizmeti seçin.
- Özellikler penceresinde, Varsayılan Dinleyici Konumu ı Karaktere ayarlayın.Deneyimi çalıştırdığınızda, motor otomatik olarak:
- Her oyuncu karakterinin AudioListener altında bir Humanoid.RootPart oluşturur, böylece deneyim içindeki ses kaynaklarının konumu ve ölçeğine göre ses değişimini duyabilirsiniz.
- Ses Hizmeti altında AudioDeviceOutput bir oluşturur .
Araştırıcı penceresinde, Çalışma Alanına > WaterfallAudioObject gidin, sonra:
- Şelale için bir ses kaynağı oluşturmak için bir Ses Çalar nesnesi ekleyin.
- Bir Ses Yayıncısı nesnesini girin ve Su Şelalesi Ses Objesi 'den pozisyonel bir akış yayınlayın.
- Sesi oynatıcıdan ses yayıncısına taşımak için bir Kablo nesnesi ekleyin.
Sesi Oynatıcı seçin, ardından Özellikler penceresinde,
- Yağmurlu bir ses parçası çalmak için Varlık Kimliği rbxassetid://1516791621.
- Ses tekrarlarının görünmez olması için döngü etkinleştirin .
Ses çıkıcısını seçin, ardından Özellikler penceresinde Ses azaltma mesafesi ni {0: 1}, {20: 0.8}, {40: 0.4}, {80: 0}, böylece ses her 20 milimetre öteden ses çıkıcısından giderek azalır.
Kablo seçin, ardından Özellikler penceresinde,
- Kaynak İstancısı nı yeni Ses Oynatıcı nıza ayarlayarak, kablonun belirli bir ses oyuncuses taşımasını istediğinizi belirtin.
- Yeni Hedefİstasyonu Ses Çıkarıcı'ya yeni Ses İstemcisi atayın, böylece kablonun su şelalesi içinde bu özel ses emisyoncusuna ses taşımasını istediğinizi belirtin
Gezgin penceresine geri dönün, Yazılım Kodu Su Şelalesi Nesnesine yerleştirin, adını LoopWaterfallMusic olarak değiştirin, ÇalıştırmaKonumu özelliğini İstemciye yapıştırın, sonra aşağıdaki kodu yazın:
local audioPlayer = script.ParentaudioPlayer:Play()Kod açıklamasıSenaryo, senaryonun ebeveynini temsil eden bir değişken ilan ederek başlar AudioPlayer .Sonra senaryo, oyuncunun deneyime katıldığı andan itibaren deneyimden çıkana kadar ses kaynağını ayarlar.
Avatarınız su şelalesine yakın olduğunda döngü çikolata yağmuru sesini duymak için deneyimi oynayın.Karakterinizin başını farklı bir yöne bakmak için döndürdüğünüzde, ses 3B uzaydaki yayıncının konumuna göre dinamik olarak değişir.
Tek atış sesi
Tek atış 3B sesi veya bir oyuncu onu tekrar tetiklemediği sürece belirli bir zamanda ve konumda çalan yönlü ses, oyuncuların eylemleri, çevrelerindeki ortam ve herhangi bir karakter hakkında konteks sağlar.Deneyimlerinizde bu tür bir ses geri bildirimini kullanmak çok önemlidir, çünkü oyuncuların gelen düşmanlardan kaçınmak veya yararlı eşyaları toplamak gibi stratejik kararlar vermesine izin verir.
Aşağıdaki bölümler, oyuncuların zamanında, yönlü geri bildirim gerektiren yaygın oyun senaryoları için uygulama detayları sağlar, durum oyun etkinlikleri, nesne etkileşimi ve oynanabilir olmayan karakter diyaloğu dahil.
Etkinlik geri geri dönüş
Oyuncular, çevrelerinde yeni oyun alanlarının kilidini açmak veya düşman ateşini tetiklemek gibi anahtar durum olaylarını tetikledikçe, odaklanma ve dikkatlerini yönlendirmeleri gereken 3B alanın nerede olduğunu anlamak çok önemlidir.Anında işitsel geri geri dönüşalmazlarsa, oynanışiçin önemli bilgileri kaçırabilirler, böylece nereye gideceklerini veya sonraki ne yapacaklarını bilmedikleri için sinir olabilirler.
Bunun neden önemli olduğunu göstermek için, her oyuncunun nişancısından oynayan Lazer Etiketi şablonundaki tek atış 3D sesini inceleyelim:
- Derin bir patlama sesi, oyuncunun blaster'dan ateşlediği her patlamada çalar.
- Bir tıklama ve robotik beep sesi, oyuncu yeni bir tur ile blaster'ını yeniden yüklediğinde her seferinde çalar.
Bu seslerin her ikisi de yakındaki oyuncuları patlamaların geldiği yöne dikkat çekerek durumsal farkındalık sağlar, böylece eğlenceye katılmak veya potansiyel tehlikeden kaçınmak için bilinçli kararlar verebilirler.
Örnek, deneyim içinde ana hedefi bitirmek için oyunculara ödül bilinci sağlamak için aynı tekniği kullanır.Üç gumdrop'u topladıktan sonra, oyuncuların içeri girmesine izin veren zencefilli evin kapısı açılır.
Oyuncuların sakız damlalarını toplaması gereken belirli bir düzen yok, bu yüzden oyuncuların son olarak topladıkları sakız damlası ne olursa olsun kapının açılmasından haberdar olmaları önemlidir.Pozisyonel ses, oyuncuların başarılarının farkında olmasını ve kapıdan gerektiği yere gitmeleri gerektiğini, nispeten uzaklıkları ve yönleri ne olursa olsun, mümkün kılar.
Tek atış etkinlik geri bildiriminin 3B sesini örnekte yeniden yaratmak için Zencefilli Ekmek Evi - Tam Ses Dosyası yer dosyasına:
Gezgin penceresinde, Çalışma Alanı > Kapı 'ya gidin, sonra:
- Ses seviyesi için bir ses kaynağı oluşturmak için bir Ses Çalar nesnesi ekleyin.
- Ses çıkarıcı nesnesini girin ve Kapı dan pozisyonel bir akış yayınlayın.
- Sesi oynatıcıdan ses yayıncısına taşımak için bir Kablo nesnesi ekleyin.
Ses Çaları seçin, ardından Özellikler penceresinde Varlık Kimliği 'yi rbxassetid://5930776613 kaydırma metali kapı sesi izi oynatmak için.
Kablo seçin, ardından Özellikler penceresinde,
- Kaynak İstancısı nı yeni Ses Oynatıcı nıza ayarlayarak, kablonun belirli bir ses oyuncuses taşımasını istediğinizi belirtin.
- Sesi bu özel ses emisyoncusuna içeri aktarmak istediğinizi belirtmek için HedefInstance 'i yeni Ses çıkıcısına 'ya ayarlayın, böylece kablo bu özel ses emisyoncusuna içeri aktarmasını istiyor.
Kâşif penceresine geri dönün, Sunucu Kod Hizmetine gidin, ardından bir Kod ekleyin, adını GumdropService olarak değiştirin, Çalışma Zamanı özelliğini Sunucuya yapıştırın, sonra aşağıdaki kodu yapıştırın:
-- Değişkenlerin başlatılmasılocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local ServerStorage = game:GetService("ServerStorage")local TweenService = game:GetService("TweenService")-- Modüllerlocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Değişkenlerlocal gumdropsFolder = Workspace.Gumdropslocal gumdrops = gumdropsFolder:GetChildren()local GUMDROP_KEY_NAME = PlayerData.GUMDROP_KEY_NAMElocal GUMDROP_AMOUNT_TO_ADD = 1local function updatePlayerGumdrops(player, updateFunction)-- Gumdrop tablosunu güncellelocal newGumdropAmount = PlayerData.updateValue(player, GUMDROP_KEY_NAME, updateFunction)-- Gumdrop lider liderlik tablosugüncelleLeaderboard.setStat(player, GUMDROP_KEY_NAME, newGumdropAmount)-- Oyuncunun üç sakız topladığını kontrol etif newGumdropAmount >= 3 then-- Oyuncu üç sakız topladığında kapı etkinliği sesini çallocal audioPlayer = Workspace.Door.AudioPlayeraudioPlayer:Play()-- Kapıyı aşağıya doğru hareket ettirinlocal doorPart = Workspace.Doorlocal tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Linear)local tween = TweenService:Create(doorPart, tweenInfo, {Position = doorPart.Position + Vector3.new(0, -15, 0)})tween:Play()endend-- Etkinlik işleyicisini tanımlamalocal function onGumdropTouched(otherPart, gumdrop)if gumdrop:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Oyuncu bir gumdrop'a dokundulocal audioPlayer = gumdrop.AudioPlayeraudioPlayer:Play()gumdrop.Transparency = 1gumdrop:SetAttribute("Enabled", false)updatePlayerGumdrops(player, function(oldGumdropAmount)oldGumdropAmount = oldGumdropAmount or 0return oldGumdropAmount + GUMDROP_AMOUNT_TO_ADDend)print("Player collected gumdrop")endendend-- Etkinlik dinleyicilerini ayarlamafor _, gumdrop in gumdrops dogumdrop:SetAttribute("Enabled", true)gumdrop.Touched:Connect(function(otherPart)onGumdropTouched(otherPart, gumdrop)end)endKod açıklamasıBu senaryo, Workspace , Players , ServerStorage ve TweenService hizmetlerini başlatarak başlar ve böylece çocuklarına ve işlevselliğine referans verebilir.Sonra, Lider tablosu ve OyuncuVerileri modüllerini gerektirir ServerStorage ; bu modüller, bir oyuncunun çevrede topladığı gumball miktarını izleyen ekranın sağ üst kısmında bir lider tablosu oluşturmak ve güncellemekten sorumludur.
Senaryonun updatePlayerGumdrops fonksiyonu, olay geri dönüşbildirimi için 3B sesi tetiklemek için çalışmanın büyük kısmının gerçekleştiği yerdir ve iki argüman alır:
- player - Bir gumdrop toplayan bir oyuncu.
- updateFunction - oyuncutopladığı gumdrop miktarını güncelleyen bir geri çağrı işlevi
Bir oyuncu bir gumdrop ile çarpıştığında, senaryo:
- oyuncuyeni gumdrop koleksiyon miktarını almak için PlayerData.updateValue fonksiyonunu çağırır.
- Lider tablosunu bu yeni miktarla günceller ve Leaderboard.setStat fonksiyonunu çağırarak.
- Miktarın 3 daha büyük veya eşit olup olmadığını kontrol eder.
Bu değer 3 daha büyük veya eşit olduğunda, kod:
- Ses oynatıcıdan 3B ses izini ses yayıncısına çalar.
- Kapıyı lineer olarak 15 altında mevcut konumundan hareket ettirir.
Senaryonun geri kalanı, gumdrop ile çakışan herhangi bir şeyi tespit etmekten sorumludur, böylece toplama geri dönüşbildirimi için pozisyonel olmayan bir ses tetikleyebilir.Senaryonun bu kısmıyla ilgili daha fazla bilgi için, 2D ses eklemek - Oyun geri bildirimi bakın.
Deneyimi oynatın ve çevredeki üç gumdrop'u topladıktan sonra kaydırma kapısı sesini duymak için deneyin.Kamerayı döndürdüğünüzde, ses dinleyicilerinizde 3B uzaydaki yayıncının konumuna göre dinlenir, böylece yayıncının konumuna göre duyarsınız.
Nesne etkileşimi
Oyuncular çevrelerindeki 3B nesnelerle etkileşirken, örneğin bir ışık anahtarını açarak veya bir silah alarak, anlık geri bildirim sağlamak önemlidir, böylece nesnelerle nasıl etkileşime girdiklerini anlayabilirler. nasıl Hem görsel hem de işitme geri bildirimin eşleştirilmesi, oyuncunun eylemleri ve çevresel yanıt arasındaki neden-sonuç ilişkisini güçlendirir.
Bu konsepti genişletmek için, kullanıcının bir kabağı bahçelendirmesi için Bitki örneğinden aşağıdaki bir atış 3B sesini inceleyelim:
- Oyuncu bir tohum eklediğinde hafif bir tıklama sesi çalar.
- Oyuncu büyüyen bitkisine su verdiğinde ıslak, patlama benzeri bir ses çalar.
- Oyuncu bütün büyümüş bitkiyi topladığında bir klib sesi çalar.
- Oyuncu karnabaharı vagonuna yerleştirdiğinde yumuşak bir thud sesi çalar.
Tüm bu sesler oyuncunun yakınlık önerisini 3B uzayda değişen nesnelerle olan anahtar etkileşimlerini güçlendirir.Renk değişikliklerinin veya animasyonların kendi sahip olçözülmesi daha zor olan görme kusurlarına sahip oyuncular için, bu çok sayıda sensör geri bildiriminin çeşitli formları sağlanması, 3B nesne etkileşimlerinin mümkün olduğunca çok oyuncuya erişilebilir ve anlaşılabilir kalmasına yardımcı olur.
Nesne geri dönüşçoklu sensör geri bildirim ile nasıl yapılandırabileceğinize dair farklı bir örnek vermek için, örnek oyuncuların zencefilli evin içindeki 3D balkabağı düğmesine adım attığında hem görsel hem de işitsel geri bildirim sağlar.Oyuncular düğme ile etkileşim kurmuyorlarsa, tipik bir nane şekeri gibi görünür, ancak düğmeye basınca örnek:
- Kutlayıcı bir jingle ses parçası çalar.
- Butonun yanlarını yeşil bir renkle boyar.
- Butonu yere taşır.
Buradan, bir öğeyi kilitlemek veya özel bir yeteneği tetiklemek gibi çeşitli benzersiz oyun eylemlerine bu etkileşimi bağlayabilirsiniz.


Tek atış nesne etkileşiminin 3B sesini örnekte yeniden yaratmak için Zencefilli Ekmek Evi - Tam Ses Dosyası yer dosyasına:
Araştırıcı penceresinde, Çalışma Alanına > 3DAudioButton gidin, sonra:
- Buton için bir ses kaynağı oluşturmak için bir Ses Çalar nesnesi ekleyin.
- Bir Ses Yayıncısı nesnesini girin ve 3DAudioButton dan pozisyonel bir akış yayınlayın.
- Sesi oynatıcıdan ses yayıncısına taşımak için bir Kablo nesnesi ekleyin.
Sesi neşeli, kutlayıcı bir ses parçası çalmak için Ses Oynatıcısı seçin, ardından Özellikler penceresinde AssetID 'yi oynatmak için ayarlayın.
Kablo seçin, ardından Özellikler penceresinde,
- Kaynak İstancısı nı yeni Ses Oynatıcı nıza ayarlayarak, kablonun belirli bir ses oyuncuses taşımasını istediğinizi belirtin.
- Hedef Instansı yeni Ses çıkıcı nıza ayarlayın, böylece kablonun bu özel ses yayıcıları içinde düğme içinde ses taşımasını istediğinizi belirtmek için.
Gezgin penceresine geri dönün, Kodu 3DAudioButton içine yerleştirin, adını değiştirin OynatAudioBasıldığındaOynat , ardından aşağıdaki kodu yazın:
local TweenService = game:GetService("TweenService")local buttonModel = script.Parent.Parentlocal buttonPart = buttonModel.ButtonPartlocal buttonPressedAudioPlayer = buttonModel.ButtonPressedAudioPlayerlocal tweenInfo = TweenInfo.new(.2, Enum.EasingStyle.Exponential)local buttonTweenByIsPressed = {-- Basılmış[true] = TweenService:Create(buttonPart, tweenInfo, {Size = buttonPart.Size / Vector3.new(2, 1, 1),Color = Color3.fromRGB(75, 151, 75),}),-- Varsayılan[false] = TweenService:Create(buttonPart, tweenInfo, {Size = buttonPart.Size,Color = Color3.fromRGB(196, 40, 28),}),}local function onIsPlayingChanged()local isPlaying = buttonPressedAudioPlayer.IsPlayinglocal tween = buttonTweenByIsPressed[isPlaying]tween:Play()endonIsPlayingChanged()buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying"):Connect(onIsPlayingChanged)buttonPressedAudioPlayer.Ended:Connect(onIsPlayingChanged)buttonPart.Touched:Connect(function(_hit)buttonPressedAudioPlayer:Play()end)Kod açıklamasıSenaryo şunları alarak başlar:
- The TweenService bu yüzden düğmenin yerden çıkan kısmını animasyonlaştırabilir.
- Senaryonun ebeveyni 3DAudioButton modeli.
- Butonun yerden çıkan kısmı.
- Kutlamanızın ses kaydıyla ilgili alakalı ses oynatıcı.
Sonra senaryo tanımlar:
- Butonun animasyonunun eksponansiyonel bir animasyon tarzıyla oynayacağını belirten bir TweenInfo nesne.
- Butonun basılmış veya basılmamış durumunu temsil eden iki genç.
- Basılan true durumu düğmeyi biraz aşağıya yere taşır ve parçanın kenarlarını yeşil bir renkle boyar.
- Basılmamış durum false düğmeyi orijinal konumuna geri hareket ettirir ve önceki renk çıkarılır.
Senaryonun geri kalanı, işin büyük kısmının nesne geri dönüşgeri bildirimi için gerçekleştiği yerdir, bu yüzden onIsPlayingChanged fonksiyon ve etkinlik dinleyicilerinin nasıl birlikte çalıştığını inceleyelim:
- buttonPart.Touched bir oyuncunun düğmeye dokunmasını dinler, ardından ses oynatıcıdan ilişkili sesi çalmak için Play() fonksiyonunu çağırır.Bu süreç, AudioPlayer.IsPlaying özelliğini false 'dan true 'a geçirir.
- buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying") ses oyuncuIsPlaying özelliğinin değişmesini dinler, ardından onIsPlayingChanged fonksiyonunu çağırır.
- onIsPlayingChanged işlevi, 3B uzayda görsel görünümünü değiştiren gençliği tetiklemek için bu bilgileri kullanır.
- Oyuncunun hızlı bir şekilde düğmeye hızlıca atlayarak sesi yeniden başlatmasını engellemek için, buttonPressedAudioPlayer.Ended ses oynatıcısının çağrılan onIsPlayingChanged fonksiyonunu tekrar çağırmadan önce bitirmesini dinler.
onIsPlayingChanged etkinliğinin sadece false 'den true 'ya değiştiğinde ateş edeceğini not etmek önemlidir, yani değiştiğinde true 'den false 'ya ateş etmez.Bu, sunucudan müşteriye yeniden yazma özelliklerinin zamanlamasıyla ilgili komplikasyonlardan dolayı niyet edilen davranıştır.Bu nedenle, her iki durumu da kapsamak için bu örnekte Ended etkinliği sağlanır ve dinlenir.
Oyuncu karakterinizin zencefilli evdeki 3D düğmesine dokunduğunda kutlama sesini duymak için deneyimi oynayın.Butondan uzaklaştığınızda, sesin ses düzeyi azalır.
Karakter diyaloğu
Oynanabilir olmayan karakterlerinizden (NPC) yönlü ses sağlamak, oyuncuları çevrelerindeki ilgi alanlarına yönlendirmek ve diğer karakterlerle olan etkileşimlerine derinlik eklemek için yararlıdır.Aslında, hikaye odaklı oyunlarda, birçok oyun tasarımcısı stratejik olarak oyunculara karakterleri, müttefiklerini ve düşmanlarını veya dünyanın kendisini dolaylı olarak öğretmek için karakter diyaloğunu kullanır.
Bu tekniğin yaygın örnekleri şunları içerir:
- Diyalog tarzı oyununuzun tonunu ayarlamak için.
- Oyunculara karakter ilişkileri hakkında öğretmek için Banter * Düşman konuşmaları motivasyonlarını itiraf etmek veya oyuncuya ilişkin konumlarını belirtmek için
- Oyuncu karakterleri düşüncelerini yüksek sesle konuşuyor ve oyuncuyu sakinleştirerek bir sonraki ne yapmaları gerektiğine yönlendiriyor, örneğin kendilerini iyileştir, başka bir yere taşın veya bir öğebul * Müttefik karakterler oyuncu karakteriyle konuşarak deneyim dünya detaylarını ortaya çıkarmak için tarih, kültür ve sosyal konular gibi Bunun pratikte nasıl görünebileceğini göstermek için, oyuncular uzay istasyonunun ana lobi alanında olduğunda periyodik olarak çalan aşağıdaki bir atış 3B sesin Karanın Ötesinde sergisini inceleyelim.
Uzay istasyonunu bir karakter olarak kullanarak, bu diyalog klibi oyunculara genel ayar hakkında önemli bir konteks ve bilgi sağlar.Örneğin, bu tek cümleden oyuncular öğrenir:
- Uzayda bulunuyorlar, özellikle Kerr-Newman Deep Space Relay 14 adlı bir uzay istasyonunda.
- Çevreleri gelecekçi ve hoşgörülü.
- Bir ziyaretçidir ve muhtemelen yakında ayrılacaktır.
Bu detaylar birlikte oyuncuları çevrelerine sokar ve onların görevine acil bir duygu ekler.Ancak, oyuncular ana görevlerinin ne olduğunu bilmiyorsa, oyunculara deneyiminizde ne yapmalarını istediğinizi bilgilendirmek için karakter diyaloğunu da kullanabilirsiniz.
Göstermek için, örnek 3B uzayında görünür bir sese veya oyuncuları kapısına açmak için üç gumdrop toplamak için oyuncuları yönlendirmek için görünmez bir bölge kullanır, ana sayfaaçmak için.Oyuncular deneyime katıldıklarında ilk gördükleri şeylerden biri olarak, oyuncular daha olasılıkla diyaloğu tetikleyecek ve başarılı olmak için ne yapmaları gerektiğini bilirler.

Bir atış karakter diyaloğunu 3B sesi örnekte yeniden yaratmak için Zencefilli Ekmek Evi - Tamamlanmış Ses Dosyası yer dosyasına:
Gezgin penceresinde, Çalışma Alanı > Diyalog Sesi 'ye gidin, sonra:
- Ses seviyesi için bir ses kaynağı oluşturmak için bir Ses Çalar nesnesi ekleyin.
- Ses çıkıcısı nesnesini girin ve Diyalog Sesi 'den pozisyonel bir akış yayınlayın.
- Sesi oynatıcıdan ses yayıncısına taşımak için bir Kablo nesnesi ekleyin.
Ses Oynatıcısı'nı seçin , ardından Özellikler penceresinde Eşya Kimliği 'yi rbxassetid://92917410841704 oynatmak için ayarlayın deneyimin hedefi için.
Kablo seçin, ardından Özellikler penceresinde,
- Kaynak İstancısı nı yeni Ses Oynatıcı nıza ayarlayarak, kablonun belirli bir ses oyuncuses taşımasını istediğinizi belirtin.
- Sesi bu özel ses emisyoncusuna içeri aktarmak istediğinizi belirtmek için HedefInstance 'i yeni Ses çıkıcısına 'ya ayarlayın, böylece kablo bu özel ses emisyoncusuna içeri aktarmasını istiyor.
Gezgin penceresine geri dönün, BaşlangıçOyuncusu > BaşlangıçKarakterScriptleri , bir YerelScript ekleyin, yeniden adlandırın SesDüzeyindeOynatmaAudio ve aşağıdaki kodu yerel kriptoya yapıştırın:
local Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local humanoid = script.Parent:WaitForChild("Humanoid")local volumeDetector = Workspace.DialogueVolumelocal trigger = humanoid:WaitForChild("Animator")local debounce = falselocal localPlayer = Players.LocalPlayervolumeDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")local hitPlayer = Players:GetPlayerFromCharacter(hitCharacter)if hitPlayer ~= localPlayer thenreturnenddebounce = truelocal audioPlayer = Workspace.DialogueVolume.AudioPlayeraudioPlayer:Play()audioPlayer.Ended:Wait()debounce = falseend)Kod açıklamasıBu senaryo, Çalışma Alanı ve Oyuncu hizmetlerini alarak başlar, böylece çocuklarını ve işlevselliğini referans alabilir.Deneyime geri yüklenen veya yeniden doğan her oyuncu karakteri için, senaryo şunu bekler:
- Adı Diyalog Hacmi olan çalışma alanındaki hacim nesnesi.
Herhangi bir şey ses ile çakıştığında, Touched etkinlik işleyici işlevi, ses ile çakışan Model karakterin ilk atasını alır, ki bu karakter modelünden bir çocuk olan karakter olmalıdır, eğer ses ile çakışan BasePart karakter bir karakter modelinin bir soyundur.Eğer öyleyse, işlev sonra:
- Debounce'u true 'ye ayarlar.
- Oynar ve sesin bitirbekler.
- Debounce'u false 'ye geri ayarlar.
Ses çalmaya başladıktan sonra false``true``false yeniden sesin tekrar tekrar tetiklenmesini engelleyen bir debounce modeli, sesin sürekli olarak oyuncularla çarpışmasını engelleyen bir debounce modelidir.Bu gecikme modeli hakkında daha fazla bilgi için, çarpışmaları algıla bakın.
Oyuncu karakteriniz kardan adamın etrafındaki ses seviyesine dokunduğunda talimat karakter diyaloğunu duymak için deneyimi oynayın.