Orta seviye öğreticiler

Sesli sohbet ekle

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

Sesli sohbet, oyuncuların 3D alanında birbirlerine yaklaşırken veya uzaklaşırken konuşanların sesini ayarlayarak gerçekçi iletişimi simüle eden bir yakınlığa dayalı sohbet özelliğidir. Oyuncuların mikrofonları ile birbirleriyle konuşmalarına izin vererek, deneyiminizin hedeflerini tamamlamak için dünya genelinde birlikte sosyalleşmelerine ve strateji geliştirmelerine olanak tanır.

Gingerbread Island - Sesli Sohbet .rbxl dosyasını referans olarak kullanarak, bu kılavuz farklı sesli sohbet biçimlerini oyununuza nasıl entegre edeceğinizi gösterir; aşağıdakiler gibi konularda rehberlik içerir:

  • Oyuncuları sadece takım arkadaşları ile sesli sohbet edebilecekleri takımlara ayırma.
  • Oyuncuların belirli bir düğmeye basılı tutarken mikrofonlarını geçici olarak aktif hale getirmelerine izin verme.
  • Sesli sohbetin etkinleştirileceği veya devre dışı bırakılacağı zaman dilimlerini yapılandırma.

Aşağıdaki bölümleri ve örneği gözden geçirirken, her bir kod örneğini kendi sesli sohbet gereksinimlerinize daha iyi uyacak şekilde ayarlayabilirsiniz.

Ayarları yapılandırın

Takım sohbeti, basılı tutarak sohbet etme veya zaman tabanlı sohbetin uygun bir şekilde çalışabilmesi için, sesli sohbeti etkinleştirmek ve 3D ortamda ses alma ve yayma işlemleri için gerekli olan uygun ses nesnelerini oluşturmak üzere sesli sohbet ayarınızı yapılandırmanız gerekir.

Oyuncular deneyiminize katıldıklarında, sesli sohbet ayarınız artık:

Aşağıdaki bölümler bu ayarları kullanarak üç benzersiz sesli sohbet yapılandırmasını detaylandırır. Eşlik ederken örnek Gingerbread Island - Sesli Sohbet yer dosyasında, ilgili devre dışı bırakılmış scripti Explorer penceresinde etkinleştirerek davranışlarını test edebilirsiniz. Her birinin düzgün çalıştığından emin olmak için, bir sonraki yapılandırmaya geçmeden önce scripti tekrar devre dışı bırakmayı unutmayın.

Explorer penceresinde devre dışı bırakılmış scriptler

Takım sohbeti ekle

Takım sohbeti, yalnızca aynı takımda yer alan oyuncuların deneyimde birbirleriyle konuşabileceği veya duyabileceği bir sesli sohbet yapılandırmasıdır. Oyununuza takım sohbetini entegre etmek, oyuncuların deneyimlerdeki sorunları çözmek için birlikte işbirliği yapmalarını ve strateji geliştirmelerini istediğinizde faydalıdır; örneğin, düşman takım pozisyonları, kaynaklar ve atamalar hakkında bilgi koordine etme.

Örnek Gingerbread Island - Sesli Sohbet yer dosyasında takım sesli sohbeti yeniden oluşturmak için:

  1. Explorer penceresinde ServerScriptService içine bir Script ekleyin.

  2. Script'e TeamChat adını verin, ardından aşağıdaki kodu script'e yapıştırın:


    local Teams = game:GetService("Teams")
    local Players = game:GetService("Players")
    local redTeam = Instance.new("Team", Teams)
    redTeam.TeamColor = BrickColor.new("Bright red")
    redTeam.AutoAssignable = true
    redTeam.Name = "Kırmızı Takım"
    local blueTeam = Instance.new("Team", Teams)
    blueTeam.TeamColor = BrickColor.new("Bright blue")
    blueTeam.AutoAssignable = true
    blueTeam.Name = "Mavi Takım"
    local function getUserIds(team : Team) : {number}
    local userIds = {}
    for _, player : Player in team:GetPlayers() do
    table.insert(userIds, player.UserId)
    end
    return userIds
    end
    local function getDevices(team : Team) : {AudioDeviceInput}
    local devices = {}
    for _, player : Player in team:GetPlayers() do
    local device : AudioDeviceInput = player:FindFirstChild("AudioDeviceInput")
    if not device then
    continue
    end
    table.insert(devices, device)
    end
    return devices
    end
    local function updateTeam(team : Team)
    local users = getUserIds(team)
    for _, device in getDevices(team) do
    device.AccessType = Enum.AccessModifierType.Allow
    device:SetUserIdAccessList(users)
    end
    end
    local function onDeviceAdded(device : AudioDeviceInput)
    local player : Player = device.Parent
    if player.Team then
    updateTeam(player.Team)
    end
    end
    local function onPlayerAdded(player : Player)
    local device = player:FindFirstChild("AudioDeviceInput")
    if device then
    onDeviceAdded(device)
    end
    player.ChildAdded:Connect(function(child)
    if child.Name == "AudioDeviceInput" then
    onDeviceAdded(child)
    end
    end)
    end
    updateTeam(blueTeam)
    updateTeam(redTeam)
    for _, player in Players:GetPlayers() do
    onPlayerAdded(player)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
    blueTeam.PlayerAdded:Connect(function() updateTeam(blueTeam) end)
    blueTeam.PlayerRemoved:Connect(function() updateTeam(blueTeam) end)
    redTeam.PlayerAdded:Connect(function() updateTeam(redTeam) end)
    redTeam.PlayerRemoved:Connect(function() updateTeam(redTeam) end)

    Script, oyuncuları deneyime katıldıklarında takımlara ayırabilmek için Teams ve Players servislerini alarak başlamaktadır. Örneğin, ek bir script gerektirmeden, Teams servisi şunları otomatik olarak yapar:

    • Oyuncuları her takıma eşit bir şekilde ayırma ve dengeleme.
    • Oyuncuları liderlik tablosunda takımlarının altında gruplama.
    • Oyuncu isimlerini 3D alanda ilişkili takım renkleriyle boyama.

    Bu servi kullanılarak, script, her takım için farklı Color özellik değerlerine sahip iki ayrık Team nesnesi oluşturur: bir takım için parlak kırmızı ve diğer takım için parlak mavi.

    Script daha sonra takım sesli sohbet yapılandırmasını ayarlamak için üç işlev tanımlar:

    • getUserIds - Bir takım içindeki tüm oyuncuların userID'lerinin bir dizisini döndürür.
    • getDevices - Bir takım içindeki tüm oyuncuların AudioDeviceInput nesnelerinin bir dizisini döndürür. Her Class.AudioDeviceInput nesnesi, bir oyuncunun gerçek dünyadaki fiziksel mikrofonunu temsil eder.
    • updateTeam - getUserIds fonksiyonundan tüm userID'leri alır, getDevices fonksiyonundan AudioDeviceInput nesnelerini döner, Enum.AccessModifierType özelliğini Allow olarak ayarlayarak sadece her takımın userID'lerinin mikrofonlarından duyulmasına izin verir ve ardından SetUserIdAccessList'i kullanıcı ID'leri ile günceller.

    Script'in geri kalan kısmı ise bu fonksiyonların ve olay dinleyicilerinin nasıl birlikte çalıştığını kontrol eder:

    • Yeni bir oyuncu deneyime katıldığında, script, oyuncunun mikrofonunun olup olmadığını kontrol eder ve takımını günceller.
    • Script, yeni bir AudioDeviceInput nesnesini tespit ettiğinde, ilgili kırmızı veya mavi takım için updateTeam fonksiyonunu çağırır.
    • Oyuncular, deneyime katıldıkça veya ayrıldıkça, script, her takımın ayarlarını güncellemek için PlayerAdded ve PlayerRemoved olaylarına bağlanır.
  3. Deneyimi birkaç arkadaşınızla test edin ve her takımdan takım arkadaşlarının sesli sohbet üzerinden yalnızca birbirlerini duyabildiğinden emin olun.

Basılı tutarak sohbet ekle

Basılı tutarak sohbet, oyuncuların yalnızca deneyim içinde mikrofonlarını belirli bir düğmeye basılı tutarak aktifleştirabildiği bir sesli sohbet yapılandırmasıdır. Bu tür bir sohbeti oyununuza dahil etmek, oyuncuların diğer oyuncular ve ortam gürültüsü üzerindeki kontrollerini artırarak daha fazla gizlilik sağlamak istediğinizde faydalıdır.

Örnek Gingerbread Island - Sesli Sohbet yer dosyasında basılı tutarak sesli sohbet oluşturmak için:

  1. Explorer penceresinde ReplicatedStorage içine bir Script ekleyin.

  2. Properties penceresinde RunContext'i Client olarak ayarlayın, böylece script yalnızca yerel oyuncunun mikrofonunu kontrol eder.

  3. Script'e PushToChat adını verin, ardından aşağıdaki kodu script'e yapıştırın:


    local Players = game:GetService("Players")
    local UserInputService = game:GetService("UserInputService")
    local audioIn: AudioDeviceInput = Players.LocalPlayer:WaitForChild("AudioDeviceInput")
    local pushToTalkKey = Enum.KeyCode.V
    audioIn.Muted = true
    UserInputService.InputBegan:Connect(function(input: InputObject)
    if input.KeyCode == pushToTalkKey then
    audioIn.Muted = false
    end
    end)
    UserInputService.InputEnded:Connect(function(input: InputObject)
    if input.KeyCode == pushToTalkKey then
    audioIn.Muted = true
    end
    end)

    Script, aşağıdakileri alarak başlar:

    • Deneyim içindeki tüm oyunculara referans vermek için Players servisi.
    • Oyuncuların cihazlarındaki düğmelere bastıklarında kontrol edebilmek için UserInputService servisi.
    • Yerel oyuncunun cihazındaki AudioDeviceInput nesnesi veya fiziksel mikrofonu.

    Script daha sonra:

    • Oyuncunun mikrofonuna konuşmak için basıp tutması gereken düğme olarak V tuşunu belirler.
    • Oyuncunun mikrofonunu sessize alır.

    Script'in geri kalan kısmı, UserInputService içindeki InputBegan ve InputEnded için iki olay dinleyicisi ayarlar. Oyuncu V tuşuna bastığında, InputBegan olayı oyuncunun mikrofonunu açar, V tuşu bırakıldığında ise InputEnded olayı mikrofonu yeniden sessize alır.

  4. Deneyimi test edin ve oyuncuların yalnızca V tuşuna bastıklarında sesli sohbet yoluyla birbirlerini duyabildiklerini doğrulayın.

Zaman tabanlı sohbet ekle

Zaman tabanlı sohbet, oyuncuların belirli bir süre boyunca yalnızca birbirleriyle konuşup duyabildiği bir sesli sohbet yapılandırmasıdır. Zaman tabanlı sohbeti oyununuza entegre etmek, oyuncuların belirli aşamalar boyunca nasıl iletişim kuracaklarını dikkatlice planlamalarını istediğinizde faydalıdır; örneğin, tur tabanlı tartışmalar veya kesitlerden sonra.

Örnek Gingerbread Island - Sesli Sohbet yer dosyasında zaman tabanlı sesli sohbet oluşturmak için:

  1. Explorer penceresinde ServerScriptService içine bir Script ekleyin.

  2. Script'e TimeBasedChat adını verin, ardından aşağıdaki kodu script'e yapıştırın:


    local Players = game:GetService("Players")
    local muteAll = false
    local function toggleMuteAll()
    muteAll = not muteAll
    for _, player in Players:GetPlayers() do
    local device : AudioDeviceInput = player:FindFirstChild("AudioDeviceInput")
    if not device then
    continue
    end
    device.Muted = muteAll
    end
    end
    while true do
    task.wait(15) -- her 15 saniyede bir
    toggleMuteAll() -- ya insanları konuşmaya izin ver ya da onları konuşmaktan alıkoy
    end

    Bu script, deneyimdeki tüm oyuncuları yönetmek için Players servisini alarak başlar. Ardından, sesli sohbeti açıp kapatmak için kullanılan muteAll bayrağını false olarak ayarlar.

    toggleMuteAll fonksiyonunu inceleyelim:

    • Deneyimdeki tüm oyuncuları Players.GetPlayers kullanarak döngüye alır.
    • Her oyuncu için, cihazındaki bir AudioDeviceInput nesnesi veya fiziksel mikrofonun olup olmadığını kontrol eder.
    • Onlarda varsa, fonksiyon AudioDeviceInput nesnesinin Muted özelliğini muteAll değerine ayarlar. Örneğin, muteAll true ise, oyuncunun mikrofonu devre dışı kalır; false olduğunda, mikrofonu aktif olur.

    Script daha sonra sonsuz bir döngüye girer, 15 saniye bekler ve tüm AudioDeviceInput nesnelerini sessize alıp açar.

  3. Deneyimi test edin ve oyuncuların yalnızca sesli sohbet yolu ile 15 saniyelik aralıklarla birbirlerini duyabildiklerini doğrulayın.

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