Commencer
Tutoriels intermédiaires

Ajouter une discussion vocale

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

La discussion vocale est une fonctionnalité de chat basée sur la proximité qui simule une communication réaliste en ajustant le volume des joueurs qui parlent au fur et à mesure qu'ils s'approchent ou s'éloignent les uns des autres dans l'espace 3D. En laissant les joueurs se parler avec leurs microphones, ils peuvent socialiser et planifier ensemble en temps réel à travers le monde pour atteindre les objectifs de votre expérience.

En utilisant le fichier Gingerbread Island - Voice Chat .rbxl comme référence, ce tutoriel vous montre comment incorporer différentes formes de discussion vocale dans votre gameplay, y compris des conseils sur :

  • Trier les joueurs en équipes qui peuvent uniquement utiliser la discussion vocale avec leurs coéquipiers.
  • Permettre aux joueurs d'activer temporairement leur microphone pendant qu'ils maintiennent un bouton spécifique sur leur appareil.
  • Configurer des périodes pendant lesquelles la discussion vocale est soit activée soit désactivée.

Au fur et à mesure que vous passez en revue les sections suivantes avec l'échantillon, vous pourrez ajuster chaque exemple de code pour mieux répondre aux besoins de votre propre configuration de discussion vocale.

Configurer les paramètres

Pour que le chat en équipe, l'activation par pression sur un bouton, ou le chat basé sur le temps fonctionnent correctement, vous devez configurer votre installation de discussion vocale pour activer la discussion vocale et créer les objets audio appropriés nécessaires pour capter et émettre du son dans l'environnement 3D.

Lorsque les joueurs rejoignent votre expérience, votre installation de discussion vocale maintenant :

Les sections suivantes détaillent trois configurations uniques de discussion vocale utilisant ces paramètres. En suivant avec le fichier de lieu d'échantillon Gingerbread Island - Voice Chat, vous pouvez activer le script désactivé correspondant dans la fenêtre Explorer pour tester son comportement. Pour vous assurer que chacun fonctionne correctement, veillez à désactiver le script à nouveau avant de passer à la configuration suivante.

Scripts désactivés dans la fenêtre Explorer

Ajouter un chat d'équipe

Le chat d'équipe est une configuration de discussion vocale dans laquelle seuls les joueurs de la même équipe peuvent parler ou entendre les uns les autres dans une expérience. Intégrer un chat d'équipe dans votre gameplay est utile lorsque vous souhaitez que les joueurs collaborent et planifient ensemble pour résoudre des problèmes dans les expériences, comme coordonner des informations sur les positions des équipes ennemies, des ressources et des affectations.

Pour recréer le chat vocal d'équipe dans le fichier d'échantillon Gingerbread Island - Voice Chat :

  1. Dans la fenêtre Explorer, insérez un Script dans ServerScriptService.

  2. Renommez le script TeamChat, puis collez le code suivant dans le script :


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

    Le script commence par obtenir les services Teams et Players afin qu'il puisse utiliser leurs fonctionnalités intégrées pour trier les joueurs en équipes dès qu'ils rejoignent l'expérience. Par exemple, sans effort de scripting supplémentaire, le service Teams gère des actions telles que :

    • Trier et équilibrer les joueurs uniformément dans chaque équipe.
    • Regrouper les joueurs sous leur équipe sur le tableau de classement.
    • Teinter les noms des joueurs dans l'espace 3D aux couleurs de leur équipe correspondante.

    En utilisant ce service, le script crée deux objets Team distincts avec des valeurs de propriétés Color différentes pour représenter chaque équipe : rouge vif pour une équipe et bleu vif pour l'autre.

    Le script définit ensuite trois fonctions où se déroule la majeure partie du travail de configuration du chat vocal d'équipe :

    • getUserIds - Retourne un tableau des userIDs de tous les joueurs d'une équipe.
    • getDevices - Retourne un tableau des objets AudioDeviceInput pour tous les joueurs d'une équipe. Chaque objet AudioDeviceInput représente un microphone physique d'un joueur dans le monde réel.
    • updateTeam - Récupère tous les userIDs à partir de getUserIds, itère sur les objets AudioDeviceInput de getDevices, définit leur propriété Enum.AccessModifierType sur Allow pour que seuls les userIDs de chaque équipe soient autorisés à entendre les microphones de leurs coéquipiers, puis met à jour la SetUserIdAccessList avec les userIDs de l'équipe.

    Le reste du script contrôle comment ces fonctions et écouteurs d'événements fonctionnent ensemble :

    • Lorsqu'un nouveau joueur rejoint l'expérience, le script vérifie si le joueur a un microphone et met à jour son équipe.
    • Lorsque le script détecte un nouvel objet AudioDeviceInput, il appelle updateTeam pour leur respectif équipe rouge ou bleue.
    • À mesure que des joueurs rejoignent ou quittent l'expérience, le script se connecte aux événements PlayerAdded et PlayerRemoved pour mettre à jour les paramètres de chaque équipe.
  3. Testez l'expérience avec quelques amis pour vérifier que les coéquipiers de chaque équipe peuvent uniquement s'entendre à travers le chat vocal.

Ajouter l'activation par pression sur un bouton

L'activation par pression sur un bouton est une configuration de discussion vocale dans laquelle les joueurs ne peuvent activer leur microphone dans une expérience que lorsqu'ils maintiennent enfoncé un bouton spécifique sur leur appareil. Intégrer l'activation par pression sur un bouton dans votre gameplay est utile lorsque vous voulez que les joueurs aient plus de confidentialité et de contrôle sur le moment où ils souhaitent être entendus parmi les autres joueurs et le bruit ambiant.

Pour recréer la discussion vocale à activation par pression sur un bouton dans le fichier d'échantillon Gingerbread Island - Voice Chat :

  1. Dans la fenêtre Explorer, insérez un Script dans ReplicatedStorage.

  2. Dans la fenêtre Propriétés, définissez RunContext sur Client afin que le script ne contrôle que le microphone du joueur local.

  3. Renommez le script PushToChat, puis collez le code suivant dans le script :


    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)

    Le script commence par obtenir :

    • Le service Players afin qu'il puisse référencer tous les joueurs au sein de l'expérience.
    • Le service UserInputService afin qu'il puisse vérifier quand un joueur appuie sur les boutons de son appareil.
    • L'objet AudioDeviceInput du joueur local, ou microphone physique sur leur appareil.

    Le script ensuite :

    • Définit la touche V comme le bouton que le joueur doit appuyer et maintenir pour parler dans son microphone.
    • Met le microphone du joueur en sourdine.

    Le reste du script met en place deux écouteurs d'événements pour InputBegan et InputEnded de UserInputService. Lorsqu'ils appuient sur la touche V, l'événement InputBegan désactive la sourdine du microphone du joueur, et lorsqu'ils relâchent la touche V, l'événement InputEnded remet le microphone en sourdine.

  4. Testez l'expérience pour vérifier que les joueurs ne peuvent s'entendre que par le chat vocal lorsqu'ils appuient sur la touche V.

Ajouter un chat basé sur le temps

Le chat basé sur le temps est une configuration de discussion vocale dans laquelle les joueurs ne peuvent parler et s'entendre que pendant une période définie. Intégrer un chat basé sur le temps dans votre gameplay est utile lorsque vous souhaitez que les joueurs planifient soigneusement comment ils communiquent entre eux pendant des phases spécifiques, comme lors de discussions à tour de rôle ou après des cinématiques.

Pour recréer la discussion vocale basée sur le temps dans le fichier d'échantillon Gingerbread Island - Voice Chat :

  1. Dans la fenêtre Explorer, insérez un Script dans ServerScriptService.

  2. Renommez le script TimeBasedChat, puis collez le code suivant dans le script :


    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) -- toutes les 15 secondes
    toggleMuteAll() -- soit permettre aux gens de parler, soit les empêcher de parler
    end

    Ce script commence par obtenir le service Players pour pouvoir référencer sa fonctionnalité pour gérer tous les joueurs dans l'expérience. Il définit ensuite un indicateur muteAll sur false, que la fonction suivante toggleMuteAll utilise pour activer et désactiver le chat vocal.

    Passons en revue la fonction toggleMuteAll :

    • Elle commence par boucler à travers tous les joueurs dans l'expérience en utilisant Players.GetPlayers.
    • Pour chaque joueur, elle vérifie s'il a un objet enfant AudioDeviceInput, ou un microphone physique sur leur appareil.
    • S'ils en ont, la fonction définit la propriété AudioDeviceInput de l'objet AudioDeviceInput sur la valeur de muteAll. Par exemple, si muteAll est true, le microphone du joueur est désactivé, et si muteAll est false, le microphone du joueur est activé.

    Le script entre ensuite dans une boucle infinie, attendant 15 secondes pour activer et désactiver tous les objets AudioDeviceInput.

  3. Testez l'expérience pour vérifier que les joueurs ne peuvent s'entendre que par le chat vocal par intervalles de 15 secondes.

©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.