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 alanda birbirine yaklaşırken veya uzaklaşırken konuşma seslerinin hacmini ayarlayarak gerçekçi iletişimi simüle eden bir yakınlık tabanlı sohbet özelliğidir. Oyuncuların mikrofonlarıyla birbirleriyle konuşmalarına izin vererek, oyun hedeflerinizi tamamlamak için dünya genelinde gerçek zamanlı olarak sosyalleşmelerini ve strateji geliştirmelerini sağlar.

Gingerbread Island - Sesli Sohbet .rbxl dosyasını referans alarak, bu eğitimde oyununuza sesli sohbetin farklı biçimlerini nasıl entegre edeceğinizi gösteriyoruz. Aşağıdaki konularda rehberlik sağlanmaktadır:

  • Oyuncuları yalnızca takım arkadaşlarıyla sesli sohbet edebilecekleri takımlara ayırma.
  • Oyuncuların belirli bir düğmeye basarken mikrofonlarını geçici olarak etkinleştirmelerine izin verme.
  • Sesli sohbetin etkin veya devre dışı olduğu zaman dilimlerini yapılandırma.

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

Ayarları yapılandır

Takım sohbeti, butona basarak sohbet veya zaman tabanlı sohbetin uygun şekilde çalışabilmesi için, sesli sohbeti etkinleştirmek ve 3D ortamda ses alıp yaymak için gerekli uygun ses nesnelerini oluşturmak üzere sesli sohbet ayarınızı yapılandırmalısınız.

Oyuncular oyununuza katıldığı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ırmaktadır. Örnek Gingerbread Island - Sesli Sohbet yer dosyası ile birlikte ilerlerken, Explorer penceresinde ilgili devre dışı bırakılmış betiği 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 betiği tekrar devre dışı bırakmayı unutmayın.

Explorer penceresindeki devre dışı bırakılmış betikler

Takım sohbeti ekle

Takım sohbeti, yalnızca aynı takımda bulunan oyuncuların bir oyunda birbirleriyle konuşabildiği veya birbirlerini duyabildiği bir sesli sohbet yapılandırmasıdır. Takım sohbetini oyununuza entegre etmek, oyuncuların oyundaki sorunları çözmek için işbirliği yapmalarını ve strateji geliştirmelerini istediğinizde faydalıdır; örneğin, düşman takım pozisyonları, kaynaklar ve görevler hakkında bilgi koordine etmek.

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

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

  2. Betiği TeamChat olarak yeniden adlandırın, ardından aşağıdaki kodu betiğ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)

    Betik, oyuncuları oyuna katıldıklarında takımlara ayırmak için Teams ve Players hizmetlerini alarak başlar. Örneğin, ek bir betik çabası olmadan, Teams hizmeti şu gibi işlemleri yönetir:

    • Oyuncuları her takıma eşit şekilde ayırma ve dengeleme.
    • Oyuncuları liderlik tablosunda kendi takımları altında gruplama.
    • 3D alanda oyuncu isimlerini karşılık gelen takım rengine göre renklendirme.

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

    Betik daha sonra takım sesli sohbet yapılandırmasını ayarlamak için işlerin büyük kısmının gerçekleştiği üç işlev tanımlar:

    • getUserIds - Bir takımda bulunan tüm oyuncuların userID'lerini içeren bir dizi döndürür.
    • getDevices - Bir takımda bulunan tüm oyuncular için AudioDeviceInput nesnelerini içeren bir dizi döndürür. Her AudioDeviceInput nesnesi, bir oyuncunun gerçek dünyadaki fiziksel mikrofonunu temsil eder.
    • updateTeam - getUserIds'dan tüm userID'leri alır, getDevices'dan AudioDeviceInput nesneleri üzerinde döngü yapar, Enum.AccessModifierType özelliğini Allow olarak ayarlar, böylece her takımda yalnızca userID'lerin mikrofonlarından duyulmasına izin verir ve ardından SetUserIdAccessList'i takımın userID'leri ile günceller.

    Betiğin geri kalanı, bu işlevlerin ve olay dinleyicilerinin nasıl birlikte çalıştığını kontrol eder:

    • Yeni bir oyuncu oyuna katıldığında, betik oyuncunun bir mikrofonu olup olmadığını doğrular ve takımını günceller.
    • Betik yeni bir AudioDeviceInput nesnesi algıladığında, ilgili kırmızı veya mavi takım için updateTeam çağrılır.
    • Oyuncular oyuna katıldıkça veya ayrıldıkça, betik her takımın ayarlarını güncellemek için PlayerAdded ve PlayerRemoved olaylarına bağlanır.
  3. Oyunu birkaç arkadaşınızla test edin ve her takımın takım arkadaşlarının yalnızca sesli sohbet aracılığıyla birbirlerini duyabildiğini doğrulayın.

Butona basarak sohbet ekle

Butona basarak sohbet, oyuncuların bir oyunda yalnızca belirli bir düğmeye basıp tuttuğunda mikrofonlarını etkinleştirebildiği bir sesli sohbet yapılandırmasıdır. Butona basarak sohbeti oyununuza entegre etmek, oyuncuların diğer oyuncular ve çevresel gürültü üzerinde duyulma kontrolü ve gizlilik sağlamalarını istediğinizde faydalıdır.

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

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

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

  3. Betiği PushToChat olarak yeniden adlandırın, ardından aşağıdaki kodu betiğ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)

    Betik, şunları alarak başlar:

    • Oyundaki tüm oyuncuları referans alabilmek için Players hizmeti.
    • Oyuncunun cihazındaki düğmelere basıldığında kontrol edebilmek için UserInputService hizmeti.
    • Yerel oyuncunun AudioDeviceInput nesnesi, yani cihazındaki fiziksel mikrofon.

    Betik daha sonra:

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

    Betiğin geri kalanı, UserInputService'den InputBegan ve InputEnded için iki olay dinleyicisi ayarlar. Oyuncu V tuşuna bastığında, InputBegan olayı oyuncunun mikrofonunu açar ve V tuşunu bıraktığında, InputEnded olayı mikrofonunu tekrar sessize alır.

  4. Oyunu test edin ve oyuncuların yalnızca V tuşuna bastıklarında sesli sohbet aracılığıyla birbirlerini duyabildiğini doğrulayın.

Zaman tabanlı sohbet ekle

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

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

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

  2. Betiği TimeBasedChat olarak yeniden adlandırın, ardından aşağıdaki kodu betiğ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ın konuşmasına izin ver, ya da konuşmalarını engelle
    end

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

    toggleMuteAll fonksiyonunu inceleyelim:

    • Players.GetPlayers kullanarak oyundaki tüm oyuncular arasında döngüye başlar.
    • Her oyuncu için, cihazındaki bir AudioDeviceInput nesnesi, yani fiziksel mikrofonu olup olmadığını kontrol eder.
    • Eğer varsa, fonksiyon AudioDeviceInput nesnesinin Muted özelliğini muteAll değerine ayarlar. Örneğin, muteAll true ise, oyuncunun mikrofonu devre dışı kalır; muteAll false ise, oyuncunun mikrofonu etkinleştirilir.

    Betik daha sonra sonsuz bir döngüye girer, her 15 saniyede bir tüm AudioDeviceInput nesnelerini sessize alır veya sessizden çıkarır.

  3. Oyunu test edin ve oyuncuların yalnızca 15 saniyelik aralıklarla sesli sohbet aracılığıyla birbirlerini duyabildiğini 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.