Tambahkan obrolan suara

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Obrolan suara adalah fitur obrolan berbasis jarak yang mensimulasikan komunikasi realistis dengan menyesuaikan volume pemain yang berbicara saat mereka bergerak lebih dekat atau lebih jauh satu sama lain di ruang 3D. Dengan membiarkan pemain berbicara satu sama lain menggunakan mikrofon mereka, mereka dapat bersosialisasi dan merencanakan bersama secara real-time di seluruh dunia untuk menyelesaikan tujuan permainan Anda.

Menggunakan file Gingerbread Island - Obrolan Suara .rbxl sebagai referensi, tutorial ini menunjukkan kepada Anda cara menggabungkan berbagai bentuk obrolan suara ke dalam gameplay Anda, termasuk panduan tentang:

  • Mengelompokkan pemain ke dalam tim yang hanya dapat menggunakan obrolan suara dengan rekan satu tim mereka.
  • Memungkinkan pemain untuk sementara mengaktifkan mikrofon mereka saat mereka menekan tombol tertentu pada perangkat mereka.
  • Mengonfigurasi periode waktu di mana obrolan suara diaktifkan atau dinonaktifkan.

Saat Anda meninjau bagian berikut bersama dengan contoh, Anda dapat menyesuaikan setiap contoh kode untuk lebih memenuhi kebutuhan obrolan suara Anda sendiri.

Konfigurasi pengaturan

Agar obrolan tim, tekan untuk obrolan, atau obrolan berbasis waktu berfungsi dengan baik, Anda harus mengonfigurasi pengaturan obrolan suara Anda untuk mengaktifkan obrolan suara dan membuat objek audio yang diperlukan untuk menangkap dan memancarkan audio dalam lingkungan 3D.

Ketika pemain bergabung dengan permainan Anda, pengaturan obrolan suara Anda sekarang:

Bagian berikut merinci tiga konfigurasi obrolan suara unik menggunakan pengaturan ini. Saat Anda mengikuti contoh file tempat Gingerbread Island - Obrolan Suara, Anda dapat mengaktifkan skrip yang dinonaktifkan yang sesuai di jendela Explorer untuk menguji perilakunya. Untuk memastikan bahwa masing-masing berfungsi dengan baik, pastikan untuk menonaktifkan skrip lagi sebelum melanjutkan ke konfigurasi berikutnya.

Skrip yang dinonaktifkan di jendela Explorer

Tambahkan obrolan tim

Obrolan tim adalah konfigurasi obrolan suara di mana hanya pemain di tim yang sama yang dapat berbicara atau mendengar satu sama lain dalam permainan. Mengintegrasikan obrolan tim ke dalam gameplay Anda berguna ketika Anda ingin pemain berkolaborasi dan merencanakan bersama untuk memecahkan masalah dalam permainan, seperti mengoordinasikan informasi tentang posisi tim musuh, sumber daya, dan penugasan.

Untuk mereplikasi obrolan suara tim dalam contoh file tempat Gingerbread Island - Obrolan Suara:

  1. Di jendela Explorer, masukkan Script ke dalam ServerScriptService.

  2. Ganti nama skrip menjadi TeamChat, lalu tempelkan kode berikut ke dalam skrip:

    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 = "Red Team"
    local blueTeam = Instance.new("Team", Teams)
    blueTeam.TeamColor = BrickColor.new("Bright blue")
    blueTeam.AutoAssignable = true
    blueTeam.Name = "Blue Team"
    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)

    Skrip dimulai dengan mendapatkan layanan Teams dan Players sehingga dapat menggunakan fungsionalitas bawaan mereka untuk mengelompokkan pemain ke dalam tim segera setelah mereka bergabung dengan permainan. Misalnya, tanpa upaya pemrograman tambahan, layanan Teams menangani tindakan seperti:

    • Mengelompokkan dan menyeimbangkan pemain secara merata ke dalam setiap tim.
    • Mengelompokkan pemain di bawah tim mereka di papan peringkat.
    • Mewarnai nama pemain di ruang 3D dengan warna tim yang sesuai.

    Menggunakan layanan ini, skrip membuat dua objek Team yang berbeda dengan nilai properti Color yang berbeda untuk mewakili setiap tim: merah cerah untuk satu tim dan biru cerah untuk tim lainnya.

    Skrip kemudian mendefinisikan tiga fungsi di mana sebagian besar pekerjaan terjadi untuk mengatur konfigurasi obrolan suara tim:

    • getUserIds - Mengembalikan array userID untuk semua pemain dalam sebuah tim.
    • getDevices - Mengembalikan array objek AudioDeviceInput untuk semua pemain dalam sebuah tim. Setiap objek Class.AudioDeviceInput mewakili mikrofon fisik pemain di dunia nyata.
    • updateTeam - Mengambil semua userID dari getUserIds, mengiterasi objek AudioDeviceInput dari getDevices, mengatur properti Enum.AccessModifierType mereka ke Allow sehingga hanya userID dalam setiap tim yang diizinkan untuk mendengar dari mikrofon rekan satu tim mereka, kemudian memperbarui SetUserIdAccessList dengan userID dari tim.

    Sisa skrip mengontrol bagaimana fungsi dan pendengar acara ini bekerja bersama:

    • Ketika seorang pemain baru bergabung dengan permainan, skrip memverifikasi apakah pemain memiliki mikrofon dan memperbarui tim mereka.
    • Ketika skrip mendeteksi objek AudioDeviceInput baru, ia memanggil updateTeam untuk tim merah atau biru mereka yang sesuai.
    • Saat pemain bergabung atau meninggalkan permainan, skrip terhubung ke acara PlayerAdded dan PlayerRemoved untuk memperbarui pengaturan setiap tim.
  3. Uji permainan dengan beberapa teman untuk memverifikasi bahwa rekan satu tim dari setiap tim hanya dapat mendengar satu sama lain melalui obrolan suara.

Tambahkan tekan untuk obrolan

Tekan untuk obrolan adalah konfigurasi obrolan suara di mana pemain hanya dapat mengaktifkan mikrofon mereka dalam permainan saat mereka menekan dan menahan tombol tertentu pada perangkat mereka. Mengintegrasikan tekan untuk obrolan ke dalam gameplay Anda berguna ketika Anda ingin pemain memiliki lebih banyak privasi dan kontrol saat mereka ingin didengar di atas pemain lain dan suara latar.

Untuk mereplikasi obrolan suara tekan dalam contoh file tempat Gingerbread Island - Obrolan Suara:

  1. Di jendela Explorer, masukkan Script ke dalam ReplicatedStorage.

  2. Di jendela Properties, atur RunContext ke Client sehingga skrip hanya mengontrol mikrofon pemain lokal.

  3. Ganti nama skrip menjadi PushToChat, lalu tempelkan kode berikut ke dalam skrip:

    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)

    Skrip dimulai dengan mendapatkan:

    • Layanan Players sehingga dapat merujuk semua pemain dalam permainan.
    • Layanan UserInputService sehingga dapat memeriksa kapan seorang pemain menekan tombol pada perangkat mereka.
    • Objek AudioDeviceInput pemain lokal, atau mikrofon fisik di perangkat mereka.

    Skrip kemudian:

    • Mengatur tombol V sebagai tombol yang perlu ditekan dan ditahan pemain untuk berbicara ke mikrofon mereka.
    • Membisukan mikrofon pemain.

    Sisa skrip mengatur dua pendengar acara untuk InputBegan dan InputEnded dari UserInputService. Ketika mereka menekan tombol V, acara InputBegan membisukan mikrofon pemain, dan ketika mereka melepaskan tombol V, acara InputEnded membisukan mikrofon mereka lagi.

  4. Uji permainan untuk memverifikasi bahwa pemain hanya dapat mendengar satu sama lain melalui obrolan suara saat mereka menekan tombol V.

Tambahkan obrolan berbasis waktu

Obrolan berbasis waktu adalah konfigurasi obrolan suara di mana pemain hanya dapat berbicara dan mendengar satu sama lain selama periode waktu tertentu. Mengintegrasikan obrolan berbasis waktu ke dalam gameplay Anda berguna ketika Anda ingin pemain merencanakan dengan hati-hati bagaimana mereka berkomunikasi satu sama lain selama fase tertentu, seperti selama diskusi berbasis putaran atau setelah cutscene.

Untuk mereplikasi obrolan suara berbasis waktu dalam contoh file tempat Gingerbread Island - Obrolan Suara:

  1. Di jendela Explorer, masukkan Script ke dalam ServerScriptService.

  2. Ganti nama skrip menjadi TimeBasedChat, lalu tempelkan kode berikut ke dalam skrip:

    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) -- setiap 15 detik
    toggleMuteAll() -- baik mengizinkan orang berbicara, atau mencegah mereka berbicara
    end

    Skrip ini dimulai dengan mendapatkan layanan Players sehingga dapat merujuk fungsionalitasnya untuk mengelola semua pemain dalam permainan. Kemudian mengatur sebuah flag muteAll ke false, yang digunakan oleh fungsi toggleMuteAll berikut untuk menghidupkan dan mematikan obrolan suara.

    Mari kita tinjau fungsi toggleMuteAll:

    • Dimulai dengan mengulangi semua pemain dalam permainan menggunakan Players.GetPlayers.
    • Untuk setiap pemain, memeriksa apakah mereka memiliki objek anak AudioDeviceInput, atau mikrofon fisik di perangkat mereka.
    • Jika mereka memilikinya, fungsi mengatur properti AudioDeviceInput objek Muted ke nilai muteAll. Misalnya, jika muteAll adalah true, mikrofon pemain dinonaktifkan, dan jika muteAll adalah false, mikrofon pemain diaktifkan.

    Skrip kemudian memasuki loop tak terbatas, menunggu 15 detik untuk membisukan dan menghidupkan semua objek AudioDeviceInput.

  3. Uji permainan untuk memverifikasi bahwa pemain hanya dapat mendengar satu sama lain melalui obrolan suara dalam interval 15 detik.

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.