Memulai
Tutorial menengah

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 yang realistis dengan menyesuaikan volume pembicara seiring mereka bergerak lebih dekat atau lebih jauh satu sama lain di ruang 3D. Dengan memungkinkan pemain untuk berbicara satu sama lain menggunakan mikrofon mereka, mereka dapat bersosialisasi dan merencanakan bersama secara real-time di seluruh dunia untuk menyelesaikan tujuan pengalaman Anda.

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

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

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

Konfigurasi pengaturan

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

Saat pemain bergabung dengan pengalaman Anda, pengaturan obrolan suara Anda sekarang:

Bagian berikut merinci tiga konfigurasi obrolan suara unik menggunakan pengaturan ini. Saat Anda mengikuti sampel file tempat Gingerbread Island - Obrolan Suara, Anda dapat mengaktifkan skrip yang dinonaktifkan 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 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 mendengarkan satu sama lain dalam pengalaman. Mengintegrasikan obrolan tim ke dalam permainan Anda berguna ketika Anda ingin pemain berkolaborasi dan merencanakan bersama untuk memecahkan masalah dalam pengalaman, seperti mengkoordinasikan informasi tentang posisi tim musuh, sumber daya, dan penugasan.

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

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

  2. Ganti nama skrip menjadi TeamChat, kemudian tempel 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 ini dimulai dengan mengambil layanan Teams dan Players sehingga dapat menggunakan fungsionalitas bawaan mereka untuk mengelompokkan pemain ke dalam tim begitu mereka bergabung dengan pengalaman. Misalnya, tanpa usaha skrip 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 sesuai dengan warna tim mereka.

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

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

    • getUserIds - Mengembalikan array userIDs untuk semua pemain di tim.
    • getDevices - Mengembalikan array objek AudioDeviceInput untuk semua pemain di tim. Setiap objek Class.AudioDeviceInput mewakili mikrofon fisik pemain di dunia nyata.
    • updateTeam - Mengambil semua userIDs dari getUserIds, melakukan iterasi pada objek AudioDeviceInput dari getDevices, mengatur properti Enum.AccessModifierType mereka menjadi Allow sehingga hanya userIDs di masing-masing tim yang diizinkan untuk mendengarkan dari mikrofon rekan tim mereka, kemudian memperbarui SetUserIdAccessList dengan userIDs dari tim.

    Sisa skrip ini mengontrol bagaimana fungsi-fungsi dan pendengar peristiwa ini berfungsi bersama:

    • Ketika pemain baru bergabung dengan pengalaman, skrip memverifikasi apakah pemain tersebut memiliki mikrofon dan memperbarui tim mereka.
    • Ketika skrip mendeteksi objek AudioDeviceInput baru, ia memanggil updateTeam untuk tim merah atau biru mereka yang sesuai.
    • Ketika pemain bergabung atau meninggalkan pengalaman, skrip terhubung ke peristiwa PlayerAdded dan PlayerRemoved untuk memperbarui pengaturan masing-masing tim.
  3. Uji pengalaman dengan beberapa teman untuk memverifikasi bahwa rekan satu tim dari masing-masing 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 pengalaman saat mereka menekan dan menahan tombol tertentu di perangkat mereka. Mengintegrasikan tekan untuk obrolan ke dalam permainan Anda berguna ketika Anda ingin pemain memiliki lebih banyak privasi dan kontrol saat mereka ingin didengar di atas pemain lain dan kebisingan di sekitar.

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

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

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

  3. Ganti nama skrip menjadi PushToChat, kemudian tempel 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 ini dimulai dengan mengambil:

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

    Skrip kemudian:

    • Mengatur tombol V sebagai tombol yang perlu ditekan dan ditahan oleh pemain agar dapat berbicara melalui mikrofon mereka.
    • Membisukan mikrofon pemain.

    Sisa dari skrip ini menyiapkan dua pendengar peristiwa untuk InputBegan dan InputEnded dari UserInputService. Ketika mereka menekan tombol V, peristiwa InputBegan membuka suara mikrofon pemain, dan ketika mereka melepaskan tombol V, peristiwa InputEnded membisukan mikrofon mereka kembali.

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

Tambahkan obrolan berbasis waktu

Obrolan berbasis waktu adalah konfigurasi obrolan suara di mana pemain hanya dapat berbicara dan mendengarkan satu sama lain selama periode waktu tertentu. Mengintegrasikan obrolan berbasis waktu ke dalam permainan 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 di dalam file tempat sampel Gingerbread Island - Obrolan Suara:

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

  2. Ganti nama skrip menjadi TimeBasedChat, kemudian tempel 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 untuk berbicara, atau mencegah mereka berbicara
    end

    Skrip ini dimulai dengan mendapatkan layanan Players sehingga dapat merujuk fungsionalitasnya untuk mengelola semua pemain dalam pengalaman. Kemudian mengatur sebuah bendera muteAll menjadi false, yang akan digunakan oleh fungsi berikutnya toggleMuteAll untuk mengganti obrolan suara.

    Mari kita tinjau fungsi toggleMuteAll:

    • Diawali dengan melakukan iterasi melalui semua pemain dalam pengalaman menggunakan Players.GetPlayers.
    • Untuk setiap pemain, mengecek apakah mereka memiliki objek anak AudioDeviceInput, atau mikrofon fisik di perangkat mereka.
    • Jika mereka memilikinya, fungsi tersebut mengatur properti AudioDeviceInput objek Muted ke nilai muteAll. Sebagai contoh, jika muteAll bernilai true, maka mikrofon pemain dinonaktifkan, dan jika muteAll bernilai false, maka mikrofon pemain diaktifkan.

    Script kemudian masuk ke dalam loop tak terbatas, menunggu 15 detik untuk membisukan dan membuka suara semua objek AudioDeviceInput.

  3. Uji pengalaman 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.