Dodaj 3D dźwięk

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

3D audio to dźwięk kierunkowy, który emitowany jest z określonej lokalizacji w przestrzeni 3D, zwiększając lub zmniejszając głośność w zależności od odległości i orientacji między nadawcą audio a odbiorcą.Oznacza to, że gdy słuchacze lub nadawcy poruszają się po środowisko, gracze mogą dynamicznie słyszeć to audio z różnych kierunków i poziomów głośności.

Używając pliku Piernikowy dom - Rozpocznij pliku jako miejsca startowego i Piernikowy dom - Ukończ dźwięk audio jako odniesienie, ten samouczek pokazuje, jak dodać zarówno pętle, jak i jednokrotny dźwięk 3D do swoich doświadczeń, w tym instrukcje dotyczące:

  • Pętanie dźwięków środowiskowych, które odtwarzają się, gdy gracze połączą się z serwerem.
  • Włączanie dźwięku, aby informować graczy o kluczowych wydarzeniach sytuacyjnych, które są ważne dla ich rozgrywka.
  • Aktywowanie audio, aby zapewnić graczom zwrotną informację audio, gdy interakują z obiektami 3D.
  • Odtwarzanie bitów dźwięku postaci, które angażują i prowadzą graczy do punktów zainteresowania w ich środowisko.

Jeśli w dowolnym momencie utkniesz w procesie, możesz użyć Piernikowego domu - Ukończonego audio jako odniesienia do porównania swojego postępu.

Obiekty audio

Aby stworzyć dźwiękkierunkowe, ważne jest zrozumienie obiektów audio, z którymi będziesz pracować przez cały ten samouczek.Istnieją sześć głównych rodzajów obiektów audio:

  • Obiekt AudioPlayer ładowany i odtwarza plik audio .
  • Obiekt jest wirtualnym głośnikiem, który emituje dźwięk do środowisko3D.
  • Obiekt jest wirtualnym mikrofonem, który odbiera dźwięk z środowisko3D.
  • Obiekt AudioDeviceOutput jest urządzeniem fizycznym sprzętu komputerowego w świecie rzeczywistym, takim jak głośnik lub słuchawki.
  • Obiekt jest mikrofonem fizycznym w prawdziwym świecie.
  • Wires przenosić strumienie audio z jednego obiektu na drugi.

Wszystkie te obiekty audio współpracują, aby emitować dźwięk tak jak ich odpowiedniki w świecie rzeczywistym.Spójrzmy, jak to działa w praktyce, używając przykładu gracza noszącego słuchawki podczas gry z laptopem:

  • The AudioPlayer ładowanie 1516791621 audio assetID do doświadczenia dla ścieżki deszczowej.
  • The AudioEmitter emituje strumień dźwięku ścieżki deszczowej do środowisko3D.
  • A Wire przenosi strumień z AudioPlayer na AudioEmitter, tak że strumień wychodzi z głośnika 3D.
  • Lista obiektów dziecka postaci AudioListener słucha tego dźwięku w środowisku 3D i przekazuje go z powrotem do ich zestaw słuchawkowy.
  • Obiekt AudioDeviceOutput przenosi dźwięk z AudioListener do głośnika fizycznego gracza lub w tym przypadku jego słuchawek.
  • Przedmiot AudioDeviceInput przechwytuje dźwięk z rzeczywistego świata i przekazuje go z powrotem do doświadczenia do rozmowy czat głosowy.

Reprezentacje obiektów w ramach doświadczenia
>

Reprezentacje obiektów w realnym świecie
>

Następne sekcje zagłębiają się głębiej i odwołują się do tych obiektów, gdy uczysz się, jak odtwarzać zarówno pętle, jak i jednorazowe 3D dźwięki.Podczas przeglądu tych obiektów za pomocą nadchodzących technik możesz dokładniej przewidzieć, jak nagrać i przekazać dźwięk z doświadczenia do gracza i odwrotnie.

Odtwarzanie dźwiękw pętli

Pętlenie 3D audio lub kierunkowe audio, które powtarza się bezproblemowo, gdy tylko gracze połączą się z serwerem, jest powszechną techniką projektowania dźwięku, aby poprawić atmosferę 3D przestrzeni, czyniąc ją żywą i dynamiczną.Ponadto pętlowanie 3D audio utrzymuje konsekwentne źródła dźwięku środowiskowego, takie jak statycz telewizora lub hałas wodospadu; jeśli te dźwięki nagle się zatrzymają, środowisko poczuje się nierealistyczne.

Aby pokazać tę koncepcję, przejrzyj, w jaki sposób następujące 3D audio dla dwóch dużych kaskad zatrzymuje się, gdy ścieżka dźwiękowa bez pętli zostanie ukończona.Choć woda początkowo zanurza graczy w środowiskozewnętrznym, nagła zmiana dźwięku jest denerwująca i nienaturalna dla sposobu, w jaki wodospad zachowuje się w realnym świecie.

Podobnie próbka wykorzystuje tę technikę dla przepływającego wodospadu czekolady i dostosowuje jej objętość zgodnie z odległością gracza od emitera dźwięku.Gdy gracz jest mniej niż 20 metrów daleko, emiter emituje dźwięk w pełnym głośności.W miarę przesuwania się gracza dalej od emitera dźwięku głośność sloshing audio zmniejsza się co 20 metrów od emitera dźwięku.Emuluje to dźwięk z realnego świata, który zmniejsza głośność w miarę oddalania się od kod źródłowy.

Aby odtworzyć pętlę 3D audio w próbce Piernikowy Dom - Ukończone audio pliku:

  1. Włącz domyślny słuchacz, który jest przypisany do twojej postaci gracza.

    1. W oknie Explorer wybierz SoundService .
    2. W oknie Właściwości , ustaw Domyślna lokalizacja nadawcy na Postać .Kiedy uruchamiasz doświadczenie, silnik automatycznie:
      • Tworzy AudioListener pod każdą postacią gracza Humanoid.RootPart, tak że możesz słyszeć zmiany dźwięków w swoich głośnikach w świecie rzeczywistym zgodnie z pozycją i skalą źródeł dźwięku w doświadczeniu.
      • Tworzy AudioDeviceOutput pod Usługą Dźwięku .
  2. W oknie Eksploratora nawiguj do Przestrzeni roboczej > WaterfallAudioObject , a następnie:

    1. Włóż obiekt Gracz audio , aby stworzyć źródło dźwięku dla wodospadu.
    2. Wprowadź obiekt wytwarzacz dźwięku , aby wyemitować strumień pozycyjny z WaterfallAudioObject .
    3. Wprowadź obiekt Przewód , aby przekazać strumień od odtwarzacza audio do emitera audio.
  3. Wybierz odtwarzacz audio , a następnie w oknie Właściwości ,

    1. Ustaw ID zasobu na rbxassetid://1516791621, aby odtworzyć deszczową ścieżkę audio.
    2. Włącz Pętlowanie , aby dźwięk powtarzał się bez przerw.
  4. Wybierz Wytwarzacz dźwięku, a następnie w oknie Właściwości ustaw Zmniejszenie odległości na tak, aby dźwięk stopniowo zmniejszał się w głośności co 20 metrów od wytwarzacza dźwięku.

  5. Wybierz Przewód , a następnie w oknie Właściwości ,

    1. Ustaw Źródłową instancję na nowy Odtwarzacz audio , aby określić, że chcesz, aby przewód przekazywał dźwięk z tego konkretnego graczaudio.
    2. Ustaw TargetInstance do nowego Emitera audio na określenie, że chcesz, aby przewód przekazywał dźwięk do tego konkretnego emitera audio w wodospadzie.
  6. Wróć do okna Eksploratora , wstaw Skrypt do WaterfallAudioObject , zmień nazwę na LoopWaterfallMusic , następnie ustaw jego właściwość RunContext na Klienta , a następnie wklej następujący kod do skryptu:


    local audioPlayer = script.Parent
    audioPlayer:Play()

    Skrypt zaczyna się od deklaracji zmiennej, która reprezentuje rodzica skryptu AudioPlayer .Skrypt następnie ustawia źródło audio do odtwarzania od chwili, gdy gracz dołącza do doświadczenia, do chwili, gdy wychodzi z doświadczenia.

  7. Przetestuj doświadczenie, aby usłyszeć dźwięk pędzącego deszczu czekolady w kółko, gdy twój awatar jest w pobliżu wodospadu.Gdy obrócisz głowę swojej postaci w innym kierunku, dźwięk dynamicznie zmienia się w głośnikach świata rzeczywistego zgodnie z pozycją emitenta w przestrzeni 3D.

Jeden strzał dźwięk

Jeden strzał 3D audio lub audio kierunkowe, które odtwarza się raz na określony czas i pozycję, chyba że gracz ponownie je uruchomi, dostarcza graczom kontekst o ich działaniach, środowiskoi wszelkich postaciach wokół nich.Korzystanie z tego typu zwrotnej informacji audio w swoich doświadczeniach jest niezbędne, ponieważ pozwala graczom podejmować strategiczne decyzje, takie jak unikanie wchodzących wrogów lub odbieranie przydatnych przedmiotów.

Następujące sekcje zawierają szczegóły wdrożenia dla wspólnych scenariuszy rozgrywki, w których gracze potrzebują terminowej, kierunkowej opiniezwrotnej, w tym wydarzeń rozgrywki sytuacyjnej, interakcji z obiektami i dialogu postaci nie do odtworzenia.

Opinia o opinie

Gdy gracze uruchamiają kluczowe wydarzenia sytuacyjne w swoim środowisko, takie jak odblokowanie nowych obszarów rozgrywki lub zachęcanie wroga do ognia, ważne jest, aby zrozumieli, gdzie w przestrzeni 3D muszą skierować swój nacisk i uwagę.Jeśli nie otrzymają natychmiastowej opiniezwrotnej akustycznej, mogą przegapić informacje, które są ważne dla ich rozgrywka, co prowadzi do frustracji z powodu niewiedzy, gdzie iść lub co zrobić dalej.

Aby pokazać, dlaczego jest to ważne, przejrzyjmy jednorazowe 3D-audio z szablonu Laser Tag, który odtwarza blaster każdego gracza:

  • Głęboki dźwięk pop trzebi się za każdym wybuchiem, jaki wystrzeliwuje gracz ze swojego blastera.
  • Kliknięcie i dźwięk beep robota odtwarza się za każdym razem, gdy gracz ponownie ładuje swój blaster nową rundą.

Oba dźwięki zapewniają świadomość sytuacyjną, alarmując wszystkich pobliskich graczy o kierunku, skąd pochodzą wybuchy, tak że mogą podejmować świadome decyzje o dołączeniu do zabawy lub unikaniu potencjalnego niebezpieczeństwa.

Próbka wykorzystuje tę samą technikę, aby zapewnić graczom świadomość sytuacyjną o ich nagrodzie za ukończenie głównego celu w ramach doświadczenia.Po zebraniu wszystkich trzech kulek gumy drzwi do domu piernikowego otwierają się, aby umożliwić graczom dostęp do obecności w środku.

Ponieważ nie ma określonego porządku, który muszą zebrać gracze, aby zebrać krople gumowe, ważne jest, aby gracze byli świadomi otwierania drzwi bez względu na to, które krople gumowe ostatnio zebrali.Dźwięk pozycyjny umożliwia to, tak że gracze są świadomi swojego sukcesu i tego, gdzie muszą iść dalej, niezależnie od ich odległości i kierunku od drzwi.

Aby odtworzyć jedno strzałowe opinie o wydarzeniu 3D audio w próbce Piernikowy Dom - Ukończone audio pliku:

  1. W oknie Eksploratora nawiguj do Przestrzeni roboczej > Drzwi , a następnie:

    1. Wstaw obiekt Odtwarzacz dźwięku , aby stworzyć źródło dźwięku dla głośności.
    2. Wprowadź obiekt wytwarzacz dźwięku , aby wyemitować strumień pozycyjny z drzwi .
    3. Wprowadź obiekt Przewód , aby przekazać strumień od odtwarzacza audio do emitera audio.
  2. Wybierz Odtwarzacz audio , a następnie w oknie Właściwości ustaw AssetID na rbxassetid://5930776613.

  3. Wybierz Przewód , a następnie w oknie Właściwości ,

    1. Ustaw Źródłową instancję na nowy Odtwarzacz audio , aby określić, że chcesz, aby przewód przekazywał dźwięk z tego konkretnego graczaudio.
    2. Ustaw TargetInstance do twojego nowego Emitera dźwięku , aby określić, że chcesz, aby przewód przekazywał dźwięk do tego konkretnego emitera dźwięku w obrębie głośności.
  4. Powrót do okna Eksploratora , przełącz się do ServerScriptService , następnie wstaw Skrypt i zmień nazwę na GumdropService , ustaw jego właściwość RunContext na Serwer , a następnie wklej następujący kod do skryptu:


    -- Inicjalizacja zmiennych
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local ServerStorage = game:GetService("ServerStorage")
    local TweenService = game:GetService("TweenService")
    -- Moduły
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- Zmienne
    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)
    -- Aktualizacja tabeli gumdrop
    local newGumdropAmount = PlayerData.updateValue(player, GUMDROP_KEY_NAME, updateFunction)
    -- Aktualizacja tabeli rankinggumdrop
    Leaderboard.setStat(player, GUMDROP_KEY_NAME, newGumdropAmount)
    -- Sprawdź, czy gracz zebrał trzy krople gumy
    if newGumdropAmount >= 3 then
    -- Odtwarzaj dźwięk wydarzenia drzwi, gdy gracz zbiera trzy krople gumy
    local audioPlayer = Workspace.Door.AudioPlayer
    audioPlayer:Play()
    -- Animuj drzwi, aby poruszały się w dół
    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
    -- Definiowanie obsługi zdarzenia
    local function onGumdropTouched(otherPart, gumdrop)
    if gumdrop:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- Gracz dotknął gumdrop
    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("Player collected gumdrop")
    end
    end
    end
    -- Konfiguracja słuchaczy wydarzeń
    for _, gumdrop in gumdrops do
    gumdrop:SetAttribute("Enabled", true)
    gumdrop.Touched:Connect(function(otherPart)
    onGumdropTouched(otherPart, gumdrop)
    end)
    end

    Ten skrypt rozpoczyna się od inicjalizacji Workspace , Players , ServerStorage i TweenService usług, aby mógł odwoływać się do ich dzieci i funkcjonalności.Wymaga to następnie modułów tablicy wyników i danych gracza w ; moduły te są odpowiedzialne za tworzenie i aktualizowanie tablicy wyników w prawym górnym rogu ekranu, która śledzi ilość gumballi, które gracz zbiera w środowisku.

    Funkcja updatePlayerGumdrops skryptu jest miejscem, w którym następuje większość pracy do uruchomienia 3D audio do odpowiedzi na wydarzenie, i wymaga dwóch argumentów:

    • player - Gracz, który zbiera gumdrop.
    • updateFunction - Funkcja powrotu, która aktualizuje ilość gumdrop zebraną przez gracza.

    Kiedy gracz zderza się z gumdropem, skrypt:

    • Zdobywa wartość nowej kolekcji gumdrop gracza, wywołując funkcję PlayerData.updateValue.
    • Aktualizuje tabelę liderów za pomocą tej nowej kwoty, wywołując funkcję Leaderboard.setStat.
    • Sprawdza, czy kwota jest większa niż lub równa 3.

    Gdy ta wartość jest większa niż lub równa 3, skrypt:

    • Odtwarza ścieżkę dźwiękową 3D z odtwarzacza audio do emitera dźwięku.
    • Przesuwa linię drzwi liniowo 15 o study poniżej jej obecnej pozycji.

    Reszta skryptu jest w dużej mierze odpowiedzialna za wykrywanie wszystkiego, co kolizuje z gumdrop jest graczem, tak aby mógł uruchomić dźwięk niepozycyjny do zwrotnej informacji o odpowiedzi na zbieranie.Aby uzyskać więcej informacji o tej części skryptu, zobacz Dodaj 2D audio - opinie o grze.

  5. Przetestuj doświadczenie, aby usłyszeć dźwięk bramy slajdu po zebraniu wszystkich trzech kulek gumy w środowisko.Gdy obrócisz kamerę, dźwięk dynamicznie zmienia się w twoich głośnikach świata rzeczywistego, tak że słyszysz go zgodnie z pozycją emitenta w przestrzeni 3D.

Interakcja z obiektem

Kiedy gracze wchodzą w interakcję z obiektami 3D w swoim środowisko, takimi jak włączenie przełącznika światła lub podniesienie broni, ważne jest, aby zapewnić natychmiastową informację zwrotną, aby zrozumieli intuicyjnie jak wchodzą w interakcję z obiektem.Łączenie zarówno wizualnej, jak i audytywnej informacji zwrotnej wzmacnia relację między działaniami gracza a odpowiedzią środowiska.

Aby rozwinąć tę koncepcję, przejrzyjmy następujący jednokrotny 3D-dźwięk audio z próbki Plant dla przepływu użytkownika ogrodzenia kiszonki:

  • Łagodny dźwięk kliknięcia zagra, gdy gracz posadzi nasiono.
  • Mokony dźwięk, podobny do rozprysku, odtwarza się, gdy gracz podlewa rosnącą roślinę.
  • Dźwięk klipu odtwarza się, gdy gracz zbiera pełnowartościową roślinę.
  • Miękki dźwięk thud odtwarza się, gdy gracz umieszcza kiełek w wagonie.

Wszystkie te dźwięki wzmacniają interakcje klawisz proximity gracza z obiektem zmieniającym formy w przestrzeni 3D.Dla graczy z wadami wzroku, w których zmiany kolorów lub animacje są trudniejsze do odczytania na posiadaćrękę, zapewnienie tych wielu form zwrotnej informacji sensorycznej pomaga utrzymać interakcje 3D z obiektami tak, aby były dostępne i intuicyjne dla jak największej liczby graczy.

Aby dać inny przykład tego, jak można skonfigurować interakcję obiektu z wieloma rodzajami opiniezwrotnych sensorycznych, próbka zapewnia zarówno wizualne, jak i audytywne informacje zwrotne za każdym razem, gdy gracze kroczą po 3D miętowym przycisku w domu piernikowym.Kiedy gracze nie wchodzą w interakcję z przyciskiem, wygląda to jak typowe cukierki miętowe, ale kiedy kroczą po przycisku, próbka:

  • Odtwarza świąteczną piosenkę dźwiękową.
  • Barwi boki przycisku z zielonym odcieniem.
  • Przesuwa przycisk do ziemi.

Od tutaj możesz połączyć tę interakcję z wszelkiego rodzaju unikalnymi działaniami w grze, takimi jak odblokowanie przedmiotu lub uruchomienie specjalnej umiejętności.

Domyślny widok
>

Naciśnięte stan
>

Aby odtworzyć interakcję jednego strzału obiektu 3D audio w pliku próbnym Piernikowy Dom - Ukończone audio:

  1. W oknie Eksploratora nawiguj do Przestrzeni roboczej > 3DAudioButton , a następnie:

    1. Wstaw obiekt Gracz audio , aby stworzyć źródło dźwięku dla przycisku.
    2. Wprowadź obiekt wytwarzacz dźwięku , aby wyemitować strumień pozycyjny z 3DAudioButton .
    3. Wprowadź obiekt Przewód , aby przekazać strumień od odtwarzacza audio do emitera audio.
  2. Wybierz odtwarzacz audio , a następnie w oknie właściwości ustaw AssetID na rbxassetid://1846248593, aby odtworzyć wesołą, świąteczną ścieżkę dźwiękową.

  3. Wybierz Przewód , a następnie w oknie Właściwości ,

    1. Ustaw Źródłową instancję na nowy Odtwarzacz audio , aby określić, że chcesz, aby przewód przekazywał dźwięk z tego konkretnego graczaudio.
    2. Ustaw TargetInstance do twojego nowego Emitera dźwięku , aby określić, że chcesz, aby przewód przekazywał dźwięk do tych konkretnych emiterów dźwięku w ramach przycisku.
  4. Powrót do okna Eksploratora , wstaw Skrypt do 3DAudioButton , zmień nazwę na Odtwarzanie dźwięku po naciśnięciu i wklej następujący kod do skryptu:


    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 = {
    -- Naciśnięty
    [true] = TweenService:Create(buttonPart, tweenInfo, {
    Size = buttonPart.Size / Vector3.new(2, 1, 1),
    Color = Color3.fromRGB(75, 151, 75),
    }),
    -- Domyślny
    [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)

    Skrypt zaczyna się od uzyskania:

    • The TweenService tak, aby mogło animować część przycisku, która wystaje z ziemi.
    • Model rodzica skryptu 3DAudioButton model.
    • Część przycisku, która wystaje z ziemi.
    • Odpowiedni odtwarzacz audio z twoją ścieżką dźwięku uroczystości.

    Skrypt następnie definiuje:

    • Przedmiot TweenInfo, który określa, że animacja przycisku będzie odtwarzana za pomocą stylu animacji wykładniczej.
    • Dwóch nastolatków, które reprezentują naciśnięty lub naciśnięty stan przycisku.
      • Stan naciśnięty true przenosi przycisk nieco w dół w stronę ziemi i barwi boki części zielonym odcieniem.
      • Stan niewskazany false przenosi przycisk z powrotem do jego pierwotnej pozycji i usuwa poprzedni odcień.

    Pozostała część skryptu to miejsce, w którym większość pracy występuje w celu zwrotnej opiniezwrotnej o interakcji z obiektem, więc przejrzyjmy, jak funkcja onIsPlayingChanged i słuchacze wydarzeń współpracują ze sobą:

    1. buttonPart.Touched słucha, aby gracz dotknął przycisku, a następnie dzwoni funkcję Play() , aby rozpocząć odtwarzanie związanego audio z odtwarzacza audio.Proces ten przełącza właściwość AudioPlayer.IsPlaying z false na true.
    2. buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying") słucha właściwości audio graczIsPlaying, aby się zmienić, a następnie wywołuje funkcję onIsPlayingChanged.
    3. Funkcja onIsPlayingChanged używa tej informacji, aby uruchomić przejście, które zmienia jej wygląd wizualny w przestrzeni 3D.
    4. Aby zapobiec przypadkowemu ponownemu uruchomieniu audio, jeśli gracz szybko skoczy na przycisk w szybkiej kolejności, buttonPressedAudioPlayer.Ended słucha, aby odtwarzacz audio zakończył odtwarzanie, zanim ponownie wezwie funkcję onIsPlayingChanged.

    Ważne jest, aby zauważyć, że wydarzenie onIsPlayingChanged uruchamia się tylko wtedy, gdy zmienia się z false na true, co oznacza, że nie strzela, gdy zmienia się z true na false.Jest to zamiar zachowania ze względu na komplikacje związane z czasem replikowania właściwości od serwera do klienta.Z tego powodu wydarzenie Ended jest dostarczane i słuchane w tym przykładzie, aby pokryć oba przypadki.

  5. Przetestuj doświadczenie, aby usłyszeć dźwięk świętowania, gdy twoja postać gracza dotknie przycisku 3D w domu piernikowym.Gdy odejdziesz od przycisku, głośność dźwięku spada.

Dialog bohaterów

Dostarczanie dźwięku kierunkowego z twoich nieodtwarzalnych postaci (NPC) jest pomocne w prowadzeniu graczy w kierunku punktów zainteresowania w ich środowiskoi dodaniu głębi do ich interakcji z innymi postaciami.W rzeczywistości w grach opartych na narracji wielu projektantów gier strategicznie wykorzystuje dialog postaci, aby pośrednio nauczyć graczy o ich postaciach, sojusznikach i wrogach lub samym świecie.

Powszechnymi przykładami tej techniki są:

  • Styl dialogu do ustawienia tonu twojej gra.
  • Bęben aby nauczyć graczy o relacjach postaci.
  • Rozmowy wroga do wyznania motywów lub ich pozycji w stosunku do gracza.
  • Postacie graczy mówiące głośno o swoich myślach, aby łagodnie poprowadzić gracza do tego, co powinien zrobić dalej, takiego jak uzdrowienie siebie, przesunięcie do innej lokalizacji lub znalezienie przedmiotu. * Sprzymierzeńcy rozmawiają z postacią gracza , aby ujawnić szczegóły świata doświadczenia, takie jak jego historia, kultura i kwestie społeczne.

Aby pokazać, jak to może wyglądać w praktyce, przejrzyjmy następujący jednokrotny dźwięk 3D z prezentacji Poza ciemnością, który okresowo odtwarza się, gdy gracze są w głównej strefie lobby kosmicznej stacji.

Używając stacji kosmicznej jako postaci, ten klip dialogowy dostarcza graczom ważny kontekst i wiedzę o ogólnych ustawienie.Na przykład z tego jednego zdania gracze dowiadują się:

  • Są w kosmosie, konkretnie na stacji kosmicznej o nazwie Kerr-Newman Deep Space Relay 14.
  • Ich środowisko jest futurystyczne i gościnne.
  • Są odwiedzającym i prawdopodobnie wkrótce odejdą.

Szczegóły te razem zanurzają graczy w ich środowiskoi dodają poczucie pilności do ich misji.Jeśli jednak gracze nie wiedzą, jaka jest ich główna misja, możesz również użyć dialogu postaci, aby poinformować graczy, co chcesz, aby zrobili w swoim doświadczeniu.

Aby zilustrować, przykład używa głośności lub niewidzialnego regionu w przestrzeni 3D, aby uruchomić dialog postaci od bałwana, który poprowadzi graczy do zebrania trzech kulek gumy, aby otworzyć drzwi do jego strona główna.Jako jedna z pierwszych rzeczy, które gracze widzą, gdy dołączają do doświadczenia, gracze są bardziej prawdopodobni do uruchomienia dialogu i wiedzy, co muszą zrobić, aby odnieść sukces.

Głośność wokół bałwana wykorzystuje informacje zwrotne o kolizji, aby odtwarzać dźwięk, gdy gracze wchodzą do regionu 3D.

Aby odtworzyć dialog postaci jednego strzału 3D audio w próbce Piernikowy Dom - Ukończ dźwięk pliku:

  1. W oknie Eksploratora nawiguj do Przestrzeni roboczej > Głośność dialogu , a następnie:

    1. Wstaw obiekt Odtwarzacz dźwięku , aby stworzyć źródło dźwięku dla głośności.
    2. Wprowadź obiekt wytwarzacz dźwięku , aby wyemitować strumień pozycyjny z DialogueVolume .
    3. Wprowadź obiekt Przewód , aby przekazać strumień od odtwarzacza audio do emitera audio.
  2. Wybierz odtwarzacz audio , a następnie w oknie właściwości ustaw AssetID na rbxassetid://92917410841704, aby odtworzyć instruktażowy ścieżek audio dla celu doświadczenia.

  3. Wybierz Przewód , a następnie w oknie Właściwości ,

    1. Ustaw Źródłową instancję na nowy Odtwarzacz audio , aby określić, że chcesz, aby przewód przekazywał dźwięk z tego konkretnego graczaudio.
    2. Ustaw TargetInstance do twojego nowego Emitera dźwięku , aby określić, że chcesz, aby przewód przekazywał dźwięk do tego konkretnego emitera dźwięku w obrębie głośności.
  4. Powrót do okna Eksploratora , przejdź do StarterPlayer > StarterCharacterScripts , wstaw Lokalny skrypt , zmień nazwę na PlayAudioWhenInVolume i wklej następujący kod do lokalnego skryptu:


    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)

    Ten skrypt rozpoczyna się od uzyskania usługi Przestrzeni roboczej i Graczy, aby mógł odwoływać się do ich dzieci i funkcjonalności.Dla każdej postaci gracza, która ładowana lub odrodza się ponownie w doświadczeniu, skrypt czeka na:

    • Obiekty Humanoid i Animator postaci.
    • Obiekt objętości w przestrzeni nazwanej DialogueVolume .

    Kiedy coś zderza się z objętością, funkcja obsługi zdarzenia Touched otrzymuje pierwszego przodka, który jest Model, który powinien być charakterem, jeśli BasePart zderzony z objętością jest potomkiem modelu postaci.Jeśli tak, funkcja następnie:

    • Ustawia debounce na true .
    • Odtwarza i czeka, aż audio się kończyć.
    • Ustawia odpuszczenie powrotne do false.

    Ustawienie debounce od false do true do false ponownie po zakończeniu odtwarzania audio jest wzorem debounce, który zapobiega powtarzaniu się audio, ponieważ gracze nieustannie kolizują z głośnością.Aby uzyskać więcej informacji o tym wzorcu debounce, zobacz Wykryj kolizje .

  5. Przetestuj doświadczenie, aby usłyszeć dialog postaci instruktażowej, gdy twoja postać gracza dotknie głośności wokół bałwana.