Ajouter de l'audio 3D

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

L'audio 3D est un son directionnel qui émet d'un emplacement particulier dans l'espace 3D, augmentant ou diminuant en volume en fonction de la distance et de l'orientation entre l'émetteur audio et l'auditeur. Cela signifie qu'à mesure que les auditeurs ou les émetteurs se déplacent dans l'environnement, les joueurs peuvent entendre cet audio de différentes directions et niveaux de volume de manière dynamique.

En utilisant le fichier Gingerbread House - Start .rbxl comme point de départ et Gingerbread House - Complete Audio comme référence, ce tutoriel vous montre comment ajouter à la fois de l'audio 3D en boucle et en un coup à vos jeux, y compris des conseils sur :

  • Les sons environnementaux en boucle qui se jouent dès que les joueurs se connectent au serveur.
  • Le déclenchement de l'audio pour informer les joueurs des événements situationnels clés qui sont importants pour leur gameplay.
  • L'activation de l'audio pour fournir aux joueurs un retour auditif lorsqu'ils interagissent avec des objets 3D.
  • La lecture de sons de personnages qui engagent et guident les joueurs vers des points d'intérêt dans leur environnement.

Si à un moment donné vous vous sentez bloqué dans le processus, vous pouvez utiliser Gingerbread House - Complete Audio comme référence pour comparer vos progrès.

Objets audio

Pour créer de l'audio directionnel, il est important de comprendre les objets audio avec lesquels vous allez travailler tout au long de ce tutoriel. Il existe six types principaux d'objets audio pour l'audio 3D :

  • L'objet AudioPlayer charge et joue le fichier audio.
  • L'objet AudioEmitter est un haut-parleur virtuel qui émet de l'audio dans l'environnement 3D.
  • L'objet AudioListener est un microphone virtuel qui capte l'audio de l'environnement 3D.
  • L'objet AudioDeviceOutput est un dispositif matériel physique dans le monde réel, tel qu'un haut-parleur ou des écouteurs.
  • L'objet AudioDeviceInput est un microphone physique dans le monde réel.
  • Wires transportent des flux audio d'un objet à un autre.

Tous ces objets audio fonctionnent ensemble pour émettre du son tout comme leurs homologues du monde réel. Voyons comment cela fonctionne en pratique en utilisant l'exemple d'un joueur portant un casque tout en jouant à un jeu sur son ordinateur portable :

  • L'objet AudioPlayer charge l'ID d'actif audio 1516791621 dans le jeu pour une piste de pluie.
  • L'objet AudioEmitter émet un flux de la piste audio de pluie dans l'environnement 3D.
  • Un Wire transporte le flux de l'AudioPlayer à l'AudioEmitter afin que le flux sorte du haut-parleur 3D.
  • L'objet enfant AudioListener du personnage écoute ce son dans l'environnement 3D et le renvoie à son casque.
  • L'objet AudioDeviceOutput transporte le son de l'AudioListener au haut-parleur physique du joueur, ou dans ce cas, à ses écouteurs.
  • L'objet AudioDeviceInput capture le son du monde réel et le renvoie dans le jeu pour le chat vocal.
Représentations des objets dans le jeu
Représentations des objets dans le monde réel

Les sections suivantes approfondissent ces objets et les référencent alors que vous apprenez à jouer à la fois de l'audio 3D en boucle et en un coup. En examinant ces objets avec les techniques à venir, vous pouvez prédire plus précisément comment capturer et transmettre le son du jeu au joueur et vice-versa.

Audio en boucle

L'audio 3D en boucle, ou audio directionnel qui se répète sans interruption dès que les joueurs se connectent au serveur, est une technique de conception sonore courante pour améliorer l'atmosphère de l'espace 3D en le rendant vivant et dynamique. De plus, l'audio 3D en boucle maintient vos sources sonores environnementales cohérentes, comme le bruit d'une télévision ou le rugissement d'une cascade ; si ces sons s'arrêtaient soudainement, l'environnement semblerait irréaliste.

Pour démontrer ce concept, examinez comment l'audio 3D pour deux grandes cascades s'arrête dès que la piste audio non bouclée est terminée. Bien que les sons de l'eau immergent initialement les joueurs dans l'environnement extérieur, le changement auditif soudain est choquant et peu naturel par rapport à la façon dont une cascade se comporte dans le monde réel.

De même, l'échantillon utilise cette technique pour la cascade de chocolat qui coule et ajuste son volume en fonction de la distance du joueur par rapport à l'émetteur audio. Lorsque le joueur est à moins de 20 studs, l'émetteur émet le son à plein volume. À mesure que le joueur s'éloigne, l'audio de clapotis diminue en volume tous les 20 studs à partir de l'émetteur audio. Cela imite le son du monde réel qui diminue en volume plus vous êtes éloigné de la source.

Pour recréer l'audio 3D en boucle dans le fichier de place Gingerbread House - Complete Audio :

  1. Activez un auditeur par défaut qui est attaché à votre personnage joueur.

    1. Dans la fenêtre Explorer, sélectionnez le SoundService.
    2. Dans la fenêtre Propriétés, définissez DefaultListenerLocation sur Character. Lorsque vous exécutez le jeu, le moteur crée automatiquement :
      • Un AudioListener sous le Humanoid.RootPart de chaque personnage joueur afin que vous puissiez entendre les sons se déplacer dans vos haut-parleurs réels en fonction de la position et de l'échelle des sources sonores dans le jeu.
      • Un AudioDeviceOutput sous SoundService.
  2. Dans la fenêtre Explorer, naviguez vers WorkspaceWaterfallAudioObject, puis :

    1. Insérez un objet AudioPlayer pour créer une source audio pour la cascade.
    2. Insérez un objet AudioEmitter pour émettre un flux positionnel depuis WaterfallAudioObject.
    3. Insérez un objet Wire pour transporter le flux de l'audio player à l'audio emitter.
  3. Sélectionnez l'AudioPlayer, puis dans la fenêtre Propriétés,

    1. Définissez AssetID sur rbxassetid://1516791621 pour jouer une piste audio de pluie.
    2. Activez Looping afin que l'audio se répète sans interruption.
  4. Sélectionnez l'AudioEmitter, puis dans la fenêtre Propriétés, définissez DistanceAttenuation sur {0: 1}, {20: 0.8}, {40: 0.4}, {80: 0} afin que le son diminue progressivement en volume tous les 20 studs à partir de l'émetteur audio.

  5. Sélectionnez le Wire, puis dans la fenêtre Propriétés,

    1. Définissez SourceInstance sur votre nouvel AudioPlayer pour spécifier que vous souhaitez que le fil transporte l'audio de ce joueur audio spécifique.
    2. Définissez TargetInstance sur votre nouvel AudioEmitter pour spécifier que vous souhaitez que le fil transporte l'audio vers cet émetteur audio spécifique dans la cascade.
  6. De retour dans la fenêtre Explorer, insérez un Script dans WaterfallAudioObject, renommez-le en LoopWaterfallMusic, définissez sa propriété RunContext sur Client, puis collez le code suivant dans le script :

    local audioPlayer = script.Parent
    audioPlayer:Play()

    Le script commence par déclarer une variable pour représenter le parent du script AudioPlayer. Le script définit ensuite la source audio pour jouer dès que le joueur rejoint le jeu jusqu'à ce qu'il quitte le jeu.

  7. Testez le jeu pour entendre le son de la pluie en boucle lorsque votre avatar est près de la cascade. Lorsque vous faites pivoter la tête de votre personnage pour regarder dans une autre direction, le son se déplace dynamiquement dans vos haut-parleurs réels en fonction de la position de l'émetteur dans l'espace 3D.

Audio en un coup

L'audio 3D en un coup, ou audio directionnel qui se joue une fois à un moment et à une position spécifiques à moins qu'un joueur ne le déclenche à nouveau, fournit aux joueurs un contexte sur leurs actions, l'environnement et les personnages qui les entourent. Utiliser ce type de retour auditif dans vos jeux est essentiel car cela permet aux joueurs de prendre des décisions stratégiques comme éviter des ennemis entrants ou ramasser des objets utiles.

Les sections suivantes fournissent des détails d'implémentation pour des scénarios de gameplay courants dans lesquels les joueurs ont besoin d'un retour directionnel opportun, y compris des événements de gameplay situationnels, des interactions avec des objets et des dialogues de personnages non jouables.

Retour d'événements

Lorsque les joueurs déclenchent des événements situationnels clés dans leur environnement, tels que le déverrouillage de nouvelles zones de gameplay ou le déclenchement de tirs ennemis, il est essentiel qu'ils comprennent où dans l'espace 3D ils doivent diriger leur attention. S'ils ne reçoivent pas de retour auditif immédiat, ils peuvent manquer des informations importantes pour leur gameplay, ce qui peut entraîner de la frustration à ne pas savoir où aller ou quoi faire ensuite.

Pour démontrer pourquoi cela est important, examinons l'audio 3D en un coup du modèle Laser Tag qui se joue depuis le blaster de chaque joueur :

  • Un son de pop profond se joue pour chaque tir que le joueur tire de son blaster.
  • Un son de clic et un bip robotique se jouent chaque fois que le joueur recharge son blaster avec une nouvelle cartouche.

Ces deux sons fournissent une conscience situationnelle en alertant tous les joueurs à proximité de la direction d'où proviennent les tirs afin qu'ils puissent prendre des décisions éclairées pour soit participer au plaisir, soit éviter un danger potentiel.

L'échantillon utilise cette même technique pour fournir aux joueurs une conscience situationnelle concernant leur récompense pour avoir complété l'objectif principal dans le jeu. Après avoir collecté les trois gommes, la porte de la maison en pain d'épice s'ouvre pour permettre aux joueurs d'accéder au cadeau à l'intérieur.

Comme il n'y a pas d'ordre spécifique dans lequel les joueurs doivent collecter les gommes, il est important que les joueurs soient conscients de l'ouverture de la porte, peu importe quelle gomme ils collectent en dernier. Le son positionnel rend cela possible afin que les joueurs soient conscients de leur succès et de l'endroit où ils doivent aller ensuite, quel que soit leur distance et leur direction par rapport à la porte.

Pour recréer le retour d'événements audio 3D en un coup dans le fichier de place Gingerbread House - Complete Audio :

  1. Dans la fenêtre Explorer, naviguez vers WorkspaceDoor, puis :

    1. Insérez un objet AudioPlayer pour créer une source audio pour le volume.
    2. Insérez un objet AudioEmitter pour émettre un flux positionnel depuis Door.
    3. Insérez un objet Wire pour transporter le flux de l'audio player à l'audio emitter.
  2. Sélectionnez l'AudioPlayer, puis dans la fenêtre Propriétés, définissez AssetID sur rbxassetid://5930776613 pour jouer une piste audio de porte métallique glissante.

  3. Sélectionnez le Wire, puis dans la fenêtre Propriétés,

    1. Définissez SourceInstance sur votre nouvel AudioPlayer pour spécifier que vous souhaitez que le fil transporte l'audio de ce joueur audio spécifique.
    2. Définissez TargetInstance sur votre nouvel AudioEmitter pour spécifier que vous souhaitez que le fil transporte l'audio vers cet émetteur audio spécifique dans le volume.
  4. De retour dans la fenêtre Explorer, naviguez vers ServerScriptService, puis insérez un Script, renommez-le en GumdropService, définissez sa propriété RunContext sur Server, puis collez le code suivant dans le script :

    -- Initialisation des variables
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local ServerStorage = game:GetService("ServerStorage")
    local TweenService = game:GetService("TweenService")
    -- Modules
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- Variables
    local gumdropsFolder = Workspace.Gumdrops
    local gumdrops = gumdropsFolder:GetChildren()
    local GUMDROP_KEY_NAME = PlayerData.GUMDROP_KEY_NAME
    local GUMDROP_AMOUNT_TO_ADD = 1
    local function updatePlayerGumdrops(player, updateFunction)
    -- Met à jour la table des gommes
    local newGumdropAmount = PlayerData.updateValue(player, GUMDROP_KEY_NAME, updateFunction)
    -- Met à jour le tableau des gommes
    Leaderboard.setStat(player, GUMDROP_KEY_NAME, newGumdropAmount)
    -- Vérifie si le joueur a collecté trois gommes
    if newGumdropAmount >= 3 then
    -- Joue l'audio de l'événement de porte lorsque le joueur collecte trois gommes
    local audioPlayer = Workspace.Door.AudioPlayer
    audioPlayer:Play()
    -- Anime la porte pour se déplacer vers le bas
    local doorPart = Workspace.Door
    local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Linear)
    local tween = TweenService:Create(doorPart, tweenInfo, {Position = doorPart.Position + Vector3.new(0, -15, 0)})
    tween:Play()
    end
    end
    -- Définition du gestionnaire d'événements
    local function onGumdropTouched(otherPart, gumdrop)
    if gumdrop:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- Le joueur a touché une gomme
    local audioPlayer = gumdrop.AudioPlayer
    audioPlayer:Play()
    gumdrop.Transparency = 1
    gumdrop:SetAttribute("Enabled", false)
    updatePlayerGumdrops(player, function(oldGumdropAmount)
    oldGumdropAmount = oldGumdropAmount or 0
    return oldGumdropAmount + GUMDROP_AMOUNT_TO_ADD
    end)
    print("Le joueur a collecté une gomme")
    end
    end
    end
    -- Configuration des écouteurs d'événements
    for _, gumdrop in gumdrops do
    gumdrop:SetAttribute("Enabled", true)
    gumdrop.Touched:Connect(function(otherPart)
    onGumdropTouched(otherPart, gumdrop)
    end)
    end

    Ce script commence par initialiser les services Workspace, Players, ServerStorage et TweenService afin de pouvoir référencer leurs enfants et leur fonctionnalité. Ensuite, il nécessite les modules Leaderboard et PlayerData dans ServerStorage ; ces modules sont responsables de la création et de la mise à jour d'un tableau dans le coin supérieur droit de l'écran qui suit le nombre de gommes qu'un joueur collecte dans l'environnement.

    La fonction updatePlayerGumdrops du script est là où se déroule la majeure partie du travail pour déclencher l'audio 3D pour le retour d'événements, et elle prend deux arguments :

    • player - Un joueur qui collecte une gomme.
    • updateFunction - Une fonction de rappel qui met à jour le montant de gommes collectées par le joueur.

    Lorsqu'un joueur entre en collision avec une gomme, le script :

    • Obtient la nouvelle valeur de collection de gommes du joueur en appelant la fonction PlayerData.updateValue.
    • Met à jour le tableau avec ce nouveau montant en appelant la fonction Leaderboard.setStat.
    • Vérifie si le montant est supérieur ou égal à 3.

    Lorsque cette valeur est supérieure ou égale à 3, le script :

    • Joue la piste audio 3D de l'audio player à l'audio emitter.
    • Déplace la porte linéairement de 15 studs en dessous de sa position actuelle.

    Le reste du script est principalement chargé de détecter si quelque chose qui entre en collision avec la gomme est un joueur afin de pouvoir déclencher un son non positionnel pour le retour de collecte. Pour plus d'informations sur cette partie du script, consultez Ajouter de l'audio 2D - Retour de gameplay.

  5. Testez le jeu pour entendre le son de la porte glissante après avoir collecté toutes les trois gommes dans l'environnement. Lorsque vous faites pivoter la caméra, le son se déplace dynamiquement dans vos haut-parleurs réels afin que vous l'entendiez en fonction de la position de l'émetteur dans l'espace 3D.

Interaction avec les objets

Lorsque les joueurs interagissent avec des objets 3D dans leur environnement, comme allumer un interrupteur ou ramasser une arme, il est important de fournir un retour instantané afin qu'ils comprennent intuitivement comment ils interagissent avec l'objet. L'association d'un retour visuel et auditif renforce la relation de cause à effet entre les actions du joueur et la réponse de l'environnement.

Pour développer ce concept, examinons l'audio 3D en un coup de l'échantillon Plant pour le flux utilisateur de jardinage d'un chou :

  • Un son de cliquetis doux se joue lorsque le joueur plante une graine.
  • Un son de splash humide se joue lorsque le joueur arrose sa plante en croissance.
  • Un son de clip se joue lorsque le joueur collecte la plante pleine croissance.
  • Un son de thud doux se joue lorsque le joueur place le chou dans la charrette.

Tous ces sons renforcent les interactions clés de proximité du joueur avec l'objet changeant de forme dans l'espace 3D. Pour les joueurs ayant des déficiences visuelles où les changements de couleur ou les animations sont plus difficiles à déchiffrer par eux-mêmes, fournir ces multiples formes de retour sensoriel aide vos interactions d'objets 3D à rester accessibles et intuitives pour le plus grand nombre de joueurs possible.

Pour donner un autre exemple de la façon dont vous pouvez configurer l'interaction avec les objets avec plusieurs formes de retour sensoriel, l'échantillon fournit à la fois un retour visuel et auditif chaque fois que les joueurs marchent sur le bouton 3D de menthe poivrée dans la maison en pain d'épice. Lorsque les joueurs n'interagissent pas avec le bouton, il apparaît comme un bonbon de menthe poivrée typique, mais lorsqu'ils marchent sur le bouton, l'échantillon :

  • Joue une piste audio de jingle de célébration.
  • Teinte les côtés du bouton d'une teinte verte.
  • Déplace le bouton dans le sol.

À partir de là, vous pouvez connecter cette interaction à toutes sortes d'actions de gameplay uniques, telles que déverrouiller un objet ou déclencher une capacité spéciale.

Vue par défaut
État pressé

Pour recréer l'audio 3D d'interaction avec un objet en un coup dans le fichier de place Gingerbread House - Complete Audio :

  1. Dans la fenêtre Explorer, naviguez vers Workspace3DAudioButton, puis :

    1. Insérez un objet AudioPlayer pour créer une source audio pour le bouton.
    2. Insérez un objet AudioEmitter pour émettre un flux positionnel depuis 3DAudioButton.
    3. Insérez un objet Wire pour transporter le flux de l'audio player à l'audio emitter.
  2. Sélectionnez l'AudioPlayer, puis dans la fenêtre Propriétés, définissez AssetID sur rbxassetid://1846248593 pour jouer une piste audio joyeuse et célébratoire.

  3. Sélectionnez le Wire, puis dans la fenêtre Propriétés,

    1. Définissez SourceInstance sur votre nouvel AudioPlayer pour spécifier que vous souhaitez que le fil transporte l'audio de ce joueur audio spécifique.
    2. Définissez TargetInstance sur votre nouvel AudioEmitter pour spécifier que vous souhaitez que le fil transporte l'audio vers cet émetteur audio spécifique dans le bouton.
  4. De retour dans la fenêtre Explorer, insérez un Script dans 3DAudioButton, renommez-le en PlayAudioWhenPressed, puis collez le code suivant dans le script :

    local TweenService = game:GetService("TweenService")
    local buttonModel = script.Parent.Parent
    local buttonPart = buttonModel.ButtonPart
    local buttonPressedAudioPlayer = buttonModel.ButtonPressedAudioPlayer
    local tweenInfo = TweenInfo.new(.2, Enum.EasingStyle.Exponential)
    local buttonTweenByIsPressed = {
    -- Pressé
    [true] = TweenService:Create(buttonPart, tweenInfo, {
    Size = buttonPart.Size / Vector3.new(2, 1, 1),
    Color = Color3.fromRGB(75, 151, 75),
    }),
    -- Par défaut
    [false] = TweenService:Create(buttonPart, tweenInfo, {
    Size = buttonPart.Size,
    Color = Color3.fromRGB(196, 40, 28),
    }),
    }
    local function onIsPlayingChanged()
    local isPlaying = buttonPressedAudioPlayer.IsPlaying
    local tween = buttonTweenByIsPressed[isPlaying]
    tween:Play()
    end
    onIsPlayingChanged()
    buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying"):Connect(onIsPlayingChanged)
    buttonPressedAudioPlayer.Ended:Connect(onIsPlayingChanged)
    buttonPart.Touched:Connect(function(_hit)
    buttonPressedAudioPlayer:Play()
    end)

    Le script commence par obtenir :

    • Le TweenService afin de pouvoir animer la partie du bouton qui dépasse du sol.
    • Le modèle parent du script 3DAudioButton.
    • La partie du bouton qui dépasse du sol.
    • Le joueur audio pertinent avec votre piste audio de célébration.

    Le script définit ensuite :

    • Un objet TweenInfo qui spécifie que l'animation du bouton se jouera avec un style d'animation exponentiel.
    • Deux animations qui représentent l'état pressé ou non pressé du bouton.
      • L'état pressé true déplace légèrement le bouton vers le bas dans le sol et teint les côtés de la partie d'une teinte verte.
      • L'état non pressé false déplace le bouton à sa position d'origine et enlève la teinte précédente.

    Le reste du script est là où se déroule la majeure partie du travail pour le retour d'interaction avec les objets, donc examinons comment la fonction onIsPlayingChanged et les écouteurs d'événements fonctionnent ensemble :

    1. buttonPart.Touched écoute qu'un joueur touche le bouton, puis appelle la fonction Play() pour commencer à jouer l'audio associé à partir de l'audio player. Ce processus change la propriété AudioPlayer.IsPlaying de false à true.
    2. buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying") écoute le changement de la propriété IsPlaying de l'audio player, puis appelle la fonction onIsPlayingChanged.
    3. La fonction onIsPlayingChanged utilise cette information pour déclencher l'animation qui change son apparence visuelle dans l'espace 3D.
    4. Pour empêcher le joueur de redémarrer accidentellement l'audio s'il sautait rapidement sur le bouton en succession rapide, buttonPressedAudioPlayer.Ended écoute la fin de la lecture de l'audio player avant d'appeler à nouveau la fonction onIsPlayingChanged.

    Il est important de noter que l'événement onIsPlayingChanged ne se déclenche que lorsqu'il change de false à true, ce qui signifie qu'il ne se déclenche pas lors du changement de true à false. C'est un comportement prévu en raison des complications liées au timing de la réplication des propriétés du serveur au client. Pour cette raison, l'événement Ended est fourni et écouté dans cet exemple pour couvrir les deux cas.

  5. Testez le jeu pour entendre le son de célébration lorsque votre personnage joueur touche le bouton 3D dans la maison en pain d'épice. Lorsque vous vous éloignez du bouton, le volume du son diminue.

Dialogue des personnages

Fournir de l'audio directionnel de vos personnages non jouables (PNJ) est utile pour guider les joueurs vers des points d'intérêt dans leur environnement et ajouter de la profondeur à leurs interactions avec d'autres personnages. En fait, dans les jeux axés sur la narration, de nombreux concepteurs utilisent stratégiquement le dialogue des personnages pour enseigner indirectement aux joueurs des informations sur leur personnage, les alliés et les ennemis, ou le monde lui-même.

Des exemples courants de cette technique incluent :

  • Style de dialogue pour définir le ton de votre jeu.
  • Banter pour enseigner aux joueurs les relations entre les personnages.
  • Conversations d'ennemis pour confesser des motivations ou leur position par rapport au joueur.
  • Les personnages joueurs exprimant leurs pensées à voix haute pour guider doucement le joueur sur ce qu'il doit faire ensuite, comme se soigner, se déplacer vers un autre endroit ou trouver un objet.
  • Les personnages alliés parlant avec le personnage joueur pour révéler des détails sur le monde du jeu, comme son histoire, sa culture et ses problèmes sociaux.

Pour démontrer à quoi cela peut ressembler en pratique, examinons l'audio 3D en un coup de Beyond the Dark qui se joue périodiquement lorsque les joueurs sont dans la zone principale du hall de la station spatiale.

En utilisant la station spatiale comme personnage, cet extrait de dialogue fournit aux joueurs un contexte et une histoire importants sur l'ensemble du cadre. Par exemple, à partir de cette seule phrase, les joueurs apprennent :

  • Ils sont dans l'espace, spécifiquement sur une station spatiale nommée Kerr-Newman Deep Space Relay 14.
  • Leur environnement est futuriste et accueillant.
  • Ils sont des visiteurs et quitteront probablement bientôt.

Ces détails immergent ensemble les joueurs dans leur environnement et ajoutent un sentiment d'urgence à leur mission. Cependant, si les joueurs ne savent pas quelle est leur mission principale, vous pouvez également utiliser le dialogue des personnages pour informer les joueurs de ce que vous voulez qu'ils fassent dans votre jeu.

Pour illustrer, l'échantillon utilise un volume, ou région invisible dans l'espace 3D, pour déclencher le dialogue des personnages du bonhomme de neige afin de guider les joueurs à collecter trois gommes pour ouvrir la porte de sa maison. Étant l'une des premières choses que les joueurs voient en rejoignant le jeu, les joueurs sont plus susceptibles de déclencher le dialogue et de savoir ce qu'ils doivent faire pour réussir.

Le volume autour du bonhomme de neige utilise un retour de collision pour jouer de l'audio lorsque les joueurs entrent dans la région 3D.

Pour recréer l'audio 3D de dialogue des personnages en un coup dans le fichier de place Gingerbread House - Complete Audio :

  1. Dans la fenêtre Explorer, naviguez vers WorkspaceDialogueVolume, puis :

    1. Insérez un objet AudioPlayer pour créer une source audio pour le volume.
    2. Insérez un objet AudioEmitter pour émettre un flux positionnel depuis DialogueVolume.
    3. Insérez un objet Wire pour transporter le flux de l'audio player à l'audio emitter.
  2. Sélectionnez l'AudioPlayer, puis dans la fenêtre Propriétés, définissez AssetID sur rbxassetid://92917410841704 pour jouer une piste audio d'instructions pour l'objectif du jeu.

  3. Sélectionnez le Wire, puis dans la fenêtre Propriétés,

    1. Définissez SourceInstance sur votre nouvel AudioPlayer pour spécifier que vous souhaitez que le fil transporte l'audio de ce joueur audio spécifique.
    2. Définissez TargetInstance sur votre nouvel AudioEmitter pour spécifier que vous souhaitez que le fil transporte l'audio vers cet émetteur audio spécifique dans le volume.
  4. De retour dans la fenêtre Explorer, naviguez vers StarterPlayerStarterCharacterScripts, insérez un LocalScript, renommez-le en PlayAudioWhenInVolume, et collez le code suivant dans le script local :

    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local humanoid = script.Parent:WaitForChild("Humanoid")
    local volumeDetector = Workspace.DialogueVolume
    local trigger = humanoid:WaitForChild("Animator")
    local debounce = false
    local localPlayer = Players.LocalPlayer
    volumeDetector.Touched:Connect(function(hit)
    if debounce then
    return
    end
    local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
    local hitPlayer = Players:GetPlayerFromCharacter(hitCharacter)
    if hitPlayer ~= localPlayer then
    return
    end
    debounce = true
    local audioPlayer = Workspace.DialogueVolume.AudioPlayer
    audioPlayer:Play()
    audioPlayer.Ended:Wait()
    debounce = false
    end)

    Ce script commence par obtenir les services Workspace et Players afin de pouvoir référencer leurs enfants et leur fonctionnalité. Pour chaque personnage joueur qui se charge ou respawn dans le jeu, le script attend :

    • Le Humanoid et les objets Animator du personnage.
    • L'objet volume dans l'espace de travail nommé DialogueVolume.

    Lorsque quelque chose entre en collision avec le volume, la fonction gestionnaire d'événements Touched obtient le premier ancêtre qui est un Model, qui devrait être le personnage si le BasePart qui a heurté le volume est un descendant d'un modèle de personnage. Si c'est le cas, la fonction :

    • Définit debounce sur true.
    • Joue et attend que l'audio se termine.
    • Définit debounce sur false.

    Définir debounce de false à true puis à false à nouveau après la fin de la lecture de l'audio est un modèle de debounce qui empêche l'audio de se déclencher à plusieurs reprises lorsque les joueurs entrent continuellement en collision avec le volume. Pour plus d'informations sur ce modèle de debounce, consultez Debounce - Détecter les collisions.

  5. Testez le jeu pour entendre le dialogue des personnages d'instructions lorsque votre personnage joueur touche le volume autour du bonhomme de neige.

©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.