Metin okuma ekleme

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Metin okuma (TTS), metin dizelerini yapay bir ses kullanarak konuşma seslerine dönüştüren bir yardımcı teknoloji biçimidir. Bu, görme, hareket veya bilişsel engelleri olan oyuncular için oyunlarınızın erişilebilirliğini artırmanın yanı sıra, tüm olası anlatı senaryoları için ses kaydetmek zorunda kalmadan dinamik olarak konuşma üretmenizi sağlar.

Gingerbread House - Başlangıç .rbxl dosyasını başlangıç noktası olarak kullanarak ve Gingerbread House - Metin Okuma dosyasını referans alarak, bu eğitimde oyunlarınıza hem temel hem de bağlama duyarlı TTS sesini nasıl ekleyeceğinizi göstereceğiz. Aşağıdaki konularda rehberlik sağlanmaktadır:

  • Asla değişmeyecek olan, UI etkileşimleri ve eğitimler gibi yaygın oyun senaryoları için TTS'yi tetikleme.
  • TTS'yi, oyuncu eylemlerine, çevresel duruma veya esnek hedeflere uyum sağlayacak şekilde yapılandırma.

Herhangi bir noktada süreçte takılırsanız, ilerlemenizi karşılaştırmak için Gingerbread House - Metin Okuma dosyasını referans olarak kullanabilirsiniz.

Ses Nesneleri

TTS sesi oluşturmak için, bu eğitim boyunca çalışacağınız ses nesnelerini anlamak önemlidir. TTS için beş ana ses nesnesi türü vardır:

  • AudioTextToSpeech nesnesi, metin dizelerini konuşma seslerine dönüştürür.
  • AudioEmitter nesnesi, 3D ortamda ses yayan bir sanaldır.
  • AudioListener nesnesi, 3D ortamdan ses toplayan bir sanaldır.
  • AudioDeviceOutput nesnesi, gerçek dünyada bir fiziksel donanım cihazıdır, örneğin bir hoparlör veya kulaklık.
  • Wires, ses akışlarını bir nesneden diğerine taşır.

Bu ses nesnelerinin tümü, oyuncu eylemlerine yanıt olarak TTS sesini yaymak için birlikte çalışır. Bir oyuncunun bir oyun oynarken kulaklık takarken 3D sesin nasıl çalıştığını bir örnekle inceleyelim:

  • AudioTextToSpeech, bir oyuncu bir oynanamaz karakterin (NPC) yakınındaki bir parçaya dokunduğunda metni yükler ve sesi dönüştürür.
  • AudioEmitter, NPC'den 3D ortama TTS ses akışını yayar.
  • Bir Wire, akışın NPC'den çıkmasını sağlamak için AudioTextToSpeech ile AudioEmitter arasında akışı taşır.
  • Karakterin çocuk AudioListener nesnesi, 3D ortamda o sesi dinler ve kulaklığa geri besler.
  • AudioDeviceOutput nesnesi, sesi AudioListener'dan oyuncunun fiziksel hoparlörüne veya bu durumda kulaklıklarına taşır.

Aşağıdaki bölümler, temel ve bağlama duyarlı sesleri oynatmayı öğrenirken bu nesneleri daha derinlemesine inceleyecek ve referans alacaktır. Bu nesneleri gelecek tekniklerle gözden geçirirken, oyundan oyuncuya sesi nasıl yakalayacağınızı ve besleyeceğinizi daha doğru bir şekilde tahmin edebilirsiniz.

Temel TTS

Temel TTS, yapay sesin bir metin dizisini oyuncu veya çevre bağlamına bakılmaksızın okuduğu en yaygın metin okuma biçimidir. Bu, oyuncu TTS sesini tetiklediğinde, kelimelerin ve yapay sesin kelimeleri okuma şeklinin, oyuncunun durumu, eylemleri veya çevresel durumu ne olursa olsun tutarlı kalacağı anlamına gelir.

Bu TTS biçimi, oyuncuların UI menüleri, eğitimler veya satıcı teklifleri veya düşman sesleri gibi rutin NPC etkileşimleri ile etkileşimde bulunduğu gibi çoğu oyun senaryosunda faydalıdır. Roblox, bu etkileşimlerden herhangi biri için deneyebileceğiniz aşağıdaki ses türlerini sağlar:

SesIDSes AçıklamasıSes Örneği
1İngiliz erkek
2İngiliz kadın
3Amerika Birleşik Devletleri erkek #1
4Amerika Birleşik Devletleri kadın #1
5Amerika Birleşik Devletleri erkek #2
6Amerika Birleşik Devletleri kadın #2
7Avustralya erkek
8Avustralya kadın
9Retro ses #1
10Retro ses #2
11Sunucu sesi
101İspanyol erkek
102İspanyol kadın
201Alman erkek
202Alman kadın
301İtalyan erkek
302İtalyan kadın
401Fransız erkek
402Fransız kadın

Temel 3D TTS sesini örnek Gingerbread House - Metin Okuma dosyasında yeniden oluşturmak için:

  1. Oyuncu karakterinize bağlı varsayılan bir dinleyici etkinleştirin.
    1. Explorer penceresinde, SoundService'i seçin.
    2. Properties penceresinde, DefaultListenerLocationCharacter olarak ayarlayın. Oyunu çalıştırdığınızda, motor otomatik olarak:
      • Her oyuncu karakterinin Humanoid.RootPart altında bir AudioListener oluşturur, böylece gerçek dünyadaki hoparlörlerinizde ses kaynaklarının konumuna ve ölçeğine göre seslerin kaymasını duyabilirsiniz.
      • SoundService altında bir AudioDeviceOutput oluşturur.
  2. Explorer penceresinde, WorkspaceDialogueVolume'a gidin, ardından:
    1. Kar manzarasının etrafında bir ses konuşma üreticisi oluşturmak için bir AudioTextToSpeech nesnesi ekleyin.
    2. DialogueVolume'dan bir konumsal akış yaymak için bir AudioEmitter nesnesi ekleyin.
    3. Ses konuşma üreticisinden ses yayıcıya akışı taşımak için bir Wire nesnesi ekleyin.
  3. AudioTextToSpeech nesnesini seçin, ardından Properties penceresinde:
    1. Text'i "Evimi açmak için her bir gumpdrop'u toplayın!" olarak ayarlayın.
    2. Yapay sesi İngiliz kadın sesi olarak ayarlamak için VoiceId'yi 2 olarak ayarlayın.
    3. Diğer ses kaynaklarının üstünde TTS sesini duyabilmeniz için Volume'u 3 olarak ayarlayın.
  4. Wire'ı seçin, ardından Properties penceresinde:
    1. Bu belirli ses konuşma üreticisinden ses taşımak istediğinizi belirtmek için SourceInstance'ı yeni AudioTextToSpeech'inize ayarlayın.
    2. Bu belirli ses yayıcıya ses taşımak istediğinizi belirtmek için TargetInstance'ı yeni AudioEmitter'ınıza ayarlayın.
  5. Explorer penceresinde, StarterPlayerStarterCharacterScripts'e gidin, ardından bir LocalScript ekleyin, adını PlayBasicTTSAudioWhenInVolume olarak değiştirin ve aşağıdaki kodu yerel script'e yapıştırın:
local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local humanoid = script.Parent:WaitForChild("Humanoid")
local volumeDetector = Workspace.DialogueVolume
local trigger = humanoid:WaitForChild("Animator")
local debounce = false
local localPlayer = Players.LocalPlayer
volumeDetector.Touched:Connect(function(hit)
if debounce then
return
end
local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
local hitPlayer = Players:GetPlayerFromCharacter(hitCharacter)
if hitPlayer ~= localPlayer then
return
end
debounce = true
local audioTextToSpeech = Workspace.DialogueVolume.AudioTextToSpeech
audioTextToSpeech:Play()
audioTextToSpeech.Ended:Wait()
debounce = false
end)

Bu script, Workspace ve Players hizmetlerini alarak çocuklarını ve işlevselliğini referans alır. Oyuna yüklenen veya yeniden doğan her oyuncu karakteri için script, aşağıdakileri bekler:

  • Karakterin Humanoid ve Animator nesneleri.
  • DialogueVolume adındaki hacim nesnesi.

Hacme bir şey çarptığında, Touched olay işleyici fonksiyonu, hacme çarpan BasePart'ın bir karakter modelinin alt öğesi olması durumunda, ilk üst nesneyi Model olarak alır. Eğer öyleyse, fonksiyon:

  • Debounce'u true olarak ayarlar.
  • TTS sesini oynatır ve bitene kadar bekler.
  • Debounce'u tekrar false olarak ayarlar.

Debounce'u false'dan true'ya ve ardından tekrar false'ya ayarlamak, oyuncular hacme sürekli çarptıkça sesin tekrar tetiklenmesini önleyen bir debounce desenidir. Bu debounce deseni hakkında daha fazla bilgi için Debounce - Çarpışmaları tespit etme sayfasına bakın.

  1. Oyunu test edin ve oyuncu karakteriniz kar manzarasının etrafındaki hacme dokunduğunda talimat karakterinin diyalogunu duyun.

Bu sesi, Text, VoiceID, Pitch ve Speed özelliklerini yeni değerlere değiştirerek daha fazla deneyebilirsiniz. Üretilen konuşma, her senaryo için yeni bir ses dosyası kaydetmeye ve yüklemeye gerek kalmadan tamamen farklı hale gelir.

Bağlama Duyarlı TTS

Bağlama duyarlı TTS, yapay sesin bir metin dizisini oyuncuya, çevresinin durumuna veya oyun durumu ile ilgili olarak okuduğu daha gelişmiş bir metin okuma biçimidir. Bu, oyuncu TTS sesini tetiklediğinde, kelimelerin ve yapay sesin kelimeleri okuma şeklinin buna göre uyum sağladığı anlamına gelir.

Bu TTS biçimi, yönlendirme ses ipuçları, hedef durumu veya benzersiz NPC etkileşimleri gibi sürekli değişen oyun senaryoları için faydalıdır. Dolayısıyla, bağlama duyarlı TTS'nin doğru olması için dönüşüm yapması gerektiğinden, oyuncular çevreyi dolaşırken ve oyun hedeflerini tamamlarken durumlarını takip edebilmeniz için oyun öğelerini yapılandırmalısınız.

Bu görevi başarmanın birçok yolu vardır, örnek, oyuncunun toplaması gereken her gumpdrop'un rengi ve konumu'nu takip etmek için özel nitelikler kullanır. Nitelikler hakkında daha fazla bilgi için Nitelikler ve özellikler sayfasına bakın.


Her gumpdrop nesnesinin, çevredeki renk ve konumunu tanımlayan nitelikleri vardır.
Sarı gumpdrop'un yakın çekim görüntüsü
Yeşil gumpdrop'un yakın çekim görüntüsü
Kırmızı gumpdrop'un yakın çekim görüntüsü

Bağlama duyarlı 3D TTS sesini örnek Gingerbread House - Metin Okuma dosyasında yeniden oluşturmak için:

  1. Explorer penceresinde, WorkspaceGumDrops'a gidin.

  2. Sarı gumpdrop'u takip etmek için üç özel nitelik yapılandırın.

    1. Sarı gumpdrop'u seçin, ardından Properties penceresinde Attributes bölümüne gidin ve artı simgesine tıklayın. Bir açılır diyalog görüntülenir.
    2. Name alanına ColorDescription yazın.
    3. Type açılır menüsünden string seçin.
    4. Save butonuna tıklayın.
    5. Yeni ColorDescription niteliğini sarı olarak ayarlayın.
    6. Bu işlemi kullanarak, aşağıdaki değerleri kullanarak iki tane daha nitelik oluşturun.
    AdTürDeğer
    HintOrdernumber0
    LocationDescriptionstringşelalenin yanında
  3. Yeşil gumpdrop'u takip etmek için üç özel nitelik yapılandırın.

    1. Explorer penceresinde, yeşil gumpdrop'u seçin.
    2. Properties penceresinde, aşağıdaki değerleri kullanarak üç nitelik oluşturun.
    AdTürDeğer
    ColorDescriptionstringyeşil
    HintOrdernumber1
    LocationDescriptionstringkenarda
  4. Kırmızı gumpdrop'u takip etmek için üç özel nitelik yapılandırın.

    1. Explorer penceresinde, kırmızı gumpdrop'u seçin.
    2. Properties penceresinde, aşağıdaki değerleri kullanarak üç nitelik oluşturun.
    AdTürDeğer
    ColorDescriptionstringkırmızı
    HintOrdernumber2
    LocationDescriptionstringçitin arkasında
  5. Explorer penceresinde, WorkspaceHintVolume'a gidin, ardından:

    1. Ren geyiğinin etrafında bir ses konuşma üreticisi oluşturmak için bir AudioTextToSpeech nesnesi ekleyin.
    2. HintVolume'dan bir konumsal akış yaymak için bir AudioEmitter nesnesi ekleyin.
    3. Ses konuşma üreticisinden ses yayıcıya akışı taşımak için bir Wire nesnesi ekleyin.
  6. Wire'ı seçin, ardından Properties penceresinde:

    1. Bu belirli ses konuşma üreticisinden ses taşımak istediğinizi belirtmek için SourceInstance'ı yeni AudioTextToSpeech'inize ayarlayın.
    2. Bu belirli ses yayıcıya ses taşımak istediğinizi belirtmek için TargetInstance'ı yeni AudioEmitter'ınıza ayarlayın.
  7. Explorer penceresinde, StarterPlayerStarterCharacterScripts'e gidin, ardından bir LocalScript ekleyin, adını PlayContextTTSAudioWhenInVolume olarak değiştirin ve aşağıdaki kodu yerel script'e yapıştırın:

local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local humanoid = script.Parent:WaitForChild("Humanoid")
local volumeDetector = Workspace.HintVolume
local trigger = humanoid:WaitForChild("Animator")
local debounce = false
local localPlayer = Players.LocalPlayer
function getRemainingGumdrops(): {Part}
local gumdropsFolder = Workspace.Gumdrops
local gumdrops = gumdropsFolder:GetChildren()
local remainingGumdrops = {};
for _, gumdrop in gumdrops do
if gumdrop:GetAttribute("Active") then
remainingGumdrops[#remainingGumdrops + 1] = gumdrop
end
end
table.sort(remainingGumdrops, function(a, b)
return a:GetAttribute("HintOrder") < b:GetAttribute("HintOrder")
end)
return remainingGumdrops
end
function getReindeerHint(remainingGumdrops: {Part}): string
local remainingGumdrops = getRemainingGumdrops()
if (#remainingGumdrops == 0) then
return "Toplayacak gumpdrop kalmadı. Eve bakın."
end
local nextGumdrop = remainingGumdrops[1]
local colorDescription = nextGumdrop:GetAttribute("ColorDescription")
local locationDescription = nextGumdrop:GetAttribute("LocationDescription")
local message = #remainingGumdrops > 1
and "Toplayacak " .. #remainingGumdrops .. " gumpdrop var. " .. colorDescription .. " olanı " .. locationDescription .. " bakın."
or "Bir gumpdrop kaldı. O " .. colorDescription .. " ve " .. locationDescription .. "."
return message
end
volumeDetector.Touched:Connect(function(hit)
if debounce then
return
end
local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
local hitPlayer = Players:GetPlayerFromCharacter(hitCharacter)
if hitPlayer ~= localPlayer then
return
end
print("Oyuncu hacme dokundu.")
debounce = true
local remainingGumdrops = getRemainingGumdrops()
local message = getReindeerHint(remainingGumdrops)
local audioTextToSpeech = Workspace.HintVolume.AudioTextToSpeech
audioTextToSpeech.Text = message
audioTextToSpeech:Play()
audioTextToSpeech.Ended:Wait()
debounce = false
end)

Bu script, Workspace ve Players hizmetlerini alarak çocuklarını ve işlevselliğini referans alır. Oyuna yüklenen veya yeniden doğan her oyuncu karakteri için script, aşağıdakileri bekler:

  • Karakterin Humanoid ve Animator nesneleri.
  • HintVolume adındaki hacim nesnesi.

Script'in getRemainingGumdrops() fonksiyonu, Gumdrops klasörü içindeki gumpdrop Part nesnelerinin bir listesini döndürür ve oyuncunun topladığı herhangi bir parçayı filtreler. Kalan gumpdrop'lar, her gumpdrop'un HintOrder niteliğine göre belirli bir sırada sıralanır.

Script'in getReindeerHint(remainingGumdrops) fonksiyonu, getRemainingGumdrops()'dan gelen listeyi alır ve oyuncunun bulması gereken kalan gumpdrop'ların nerede olduğunu tanımlayan bir dize mesajı döndürür; bu, oyuncunun toplaması gereken bir sonraki gumpdrop'un renk ve konum açıklamasını içerir. Ancak, oyuncu çevredeki tüm gumpdrop'ları topladıysa, dize mesajı, çevredeki tüm gumpdrop'ları topladıktan sonra nereye gitmeleri gerektiğini tanımlar.

Hacme bir şey çarptığında, Touched olay işleyici fonksiyonu, hacme çarpan BasePart'ın bir karakter modelinin alt öğesi olması durumunda, ilk üst nesneyi Model olarak alır. Eğer öyleyse, fonksiyon:

  • Debounce'u true olarak ayarlar.
  • Kalan gumpdrop'ların listesini ve oyuncunun bulması gereken bir sonraki gumpdrop'u tanımlayan dize mesajını alır.
  • Dizeyi AudioTextToSpeech nesnesini kullanarak ses haline dönüştürür, sesi oynatır ve sesin bitmesini bekler.
  • Debounce'u tekrar false olarak ayarlar.

Debounce'u false'dan true'ya ve ardından tekrar false'ya ayarlamak, oyuncular hacme sürekli çarptıkça sesin tekrar tetiklenmesini önleyen bir debounce desenidir. Bu debounce deseni hakkında daha fazla bilgi için Debounce - Çarpışmaları tespit etme sayfasına bakın.

  1. Oyunu test edin ve oyuncu karakteriniz ren geyiğinin etrafındaki hacme dokunduğunda bağlamsal ipuçlarını duyun. TTS sesi, oyuncu karakterinin çevrede zaten bulduğu gumpdrop'ların sayısına ve rengine göre değişir.

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.