Memulai
Tutorial menengah

Tambahkan audio 3D

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

Audio 3D adalah suara directional yang dipancarkan dari lokasi tertentu di ruang 3D, meningkat atau menurun volumenya tergantung pada jarak dan orientasi antara emitter audio dan pendengar. Ini berarti bahwa saat pendengar atau emitter bergerak di sekitar lingkungan, pemain dapat secara dinamis mendengar audio tersebut dari berbagai arah dan tingkat volume.

Menggunakan file Gingerbread House - Start .rbxl sebagai titik awal dan Gingerbread House - Complete Audio sebagai referensi, tutorial ini menunjukkan cara menambahkan audio 3D looping dan satu kali ke pengalaman Anda, termasuk panduan tentang:

  • Suara lingkungan looping yang diputar segera setelah pemain terhubung ke server.
  • Memicu audio untuk memberitahu pemain tentang peristiwa situasional kunci yang penting untuk gameplay mereka.
  • Mengaktifkan audio untuk memberikan umpan balik auditori kepada pemain ketika mereka berinteraksi dengan objek 3D.
  • Memutar rekaman suara karakter yang melibatkan dan mengarahkan pemain menuju titik menarik di dalam lingkungan mereka.

Jika pada suatu saat Anda terjebak dalam proses, Anda dapat menggunakan Gingerbread House - Complete Audio sebagai referensi untuk membandingkan kemajuan Anda.

Objek audio

Untuk membuat audio directional, penting untuk memahami objek audio yang akan Anda gunakan sepanjang tutorial ini. Ada enam jenis utama objek audio untuk audio 3D:

  • Objek AudioPlayer memuat dan memutar file audio.
  • Objek AudioEmitter adalah speaker virtual yang memancarkan audio ke dalam lingkungan 3D.
  • Objek AudioListener adalah mikrofon virtual yang menangkap audio dari lingkungan 3D.
  • Objek AudioDeviceOutput adalah perangkat keras fisik di dunia nyata, seperti speaker atau headphone.
  • Objek AudioDeviceInput adalah mikrofon fisik di dunia nyata.
  • Wires membawa aliran audio dari satu objek ke objek lainnya.

Semua objek audio ini bekerja sama untuk memancarkan suara persis seperti rekannya di dunia nyata. Mari kita lihat bagaimana ini bekerja dalam praktik menggunakan contoh seorang pemain yang mengenakan headset saat memainkan pengalaman dengan laptop mereka:

  • Objek AudioPlayer memuat ID aset audio 1516791621 ke dalam pengalaman untuk trek hujan.
  • Objek AudioEmitter memancarkan aliran suara trek hujan ke dalam lingkungan 3D.
  • Sebuah Wire membawa aliran dari AudioPlayer ke AudioEmitter sehingga aliran keluar dari speaker 3D.
  • Objek anak AudioListener dari karakter mendengarkan suara tersebut dalam lingkungan 3D dan mengalirkannya kembali ke headset mereka.
  • Objek AudioDeviceOutput membawa suara dari AudioListener ke speaker fisik pemain, atau dalam hal ini, headphone mereka.
  • Objek AudioDeviceInput menangkap suara dari dunia nyata dan mengalirkannya kembali ke pengalaman untuk obrolan suara.
Representasi objek dalam pengalaman
Representasi objek di dunia nyata

Bagian berikut menyelami lebih dalam dan merujuk pada objek-objek ini saat Anda belajar bagaimana memutar audio 3D baik looping maupun satu kali. Saat Anda meninjau objek-objek ini dengan teknik yang akan datang, Anda dapat lebih akurat memprediksi bagaimana menangkap dan memberi suara dari pengalaman kepada pemain dan sebaliknya.

Audio looping

Audio 3D looping, atau audio directional yang berulang tanpa henti segera setelah pemain terhubung ke server, adalah teknik desain suara umum untuk meningkatkan suasana ruang 3D dengan membuatnya terasa hidup dan dinamis. Selain itu, audio 3D looping menjaga sumber suara lingkungan Anda konsisten, seperti statis televisi atau deru air terjun; jika suara ini tiba-tiba berhenti, lingkungan akan terasa tidak realistis.

Untuk mendemonstrasikan konsep ini, tinjau bagaimana audio 3D berikut untuk dua air terjun besar berhenti segera setelah trek audio yang tidak diulang selesai. Sementara suara air awalnya membenamkan pemain ke dalam lingkungan outdoor, perubahan auditori yang tiba-tiba itu mengejutkan dan tidak alami bagi cara air terjun bersikap di dunia nyata.

Dengan cara yang sama, contoh ini menggunakan teknik ini untuk aliran air terjun cokelat, dan mengatur volumenya sesuai dengan jarak pemain dari emitter audio. Ketika pemain kurang dari 20 stud jauh, emitter memancarkan suara dengan volume penuh. Saat pemain bergerak lebih jauh, audio gelombang menurun dalam volume setiap 20 stud dari emitter audio. Ini meniru suara dunia nyata yang menurun dalam volume semakin jauh Anda dari sumbernya.

Untuk merekonstruksi audio 3D looping dalam file tempat Gingerbread House - Complete Audio:

  1. Aktifkan pendengar default yang terpasang pada karakter pemain Anda.

    1. Di jendela Explorer, pilih SoundService.
    2. Di jendela Properties, atur DefaultListenerLocation ke Character. Saat Anda menjalankan pengalaman, mesin secara otomatis:
      • Membuat AudioListener di bawah Humanoid.RootPart setiap karakter pemain agar Anda dapat mendengar suara berpindah di speaker dunia nyata Anda sesuai dengan posisi dan skala sumber suara dalam pengalaman.
      • Membuat AudioDeviceOutput di bawah SoundService.
  2. Di jendela Explorer, navigasikan ke WorkspaceWaterfallAudioObject, kemudian:

    1. Sisipkan objek AudioPlayer untuk membuat sumber audio untuk air terjun.
    2. Sisipkan objek AudioEmitter untuk memancarkan aliran posisi dari WaterfallAudioObject.
    3. Sisipkan objek Wire untuk membawa aliran dari audio player ke audio emitter.
  3. Pilih AudioPlayer, lalu di jendela Properties,

    1. Atur AssetID ke rbxassetid://1516791621 untuk memainkan trek audio hujan.
    2. Aktifkan Looping agar audio terulang dengan mulus.
  4. Pilih AudioEmitter, lalu di jendela Properties, atur DistanceAttenuation ke {0: 1}, {20: 0.8}, {40: 0.4}, {80: 0} sehingga suara secara bertahap menurun volumenya setiap 20 stud dari emitter audio.

  5. Pilih Wire, lalu di jendela Properties,

    1. Atur SourceInstance ke AudioPlayer baru Anda untuk menentukan bahwa Anda ingin kawat tersebut membawa audio dari player audio spesifik ini.
    2. Atur TargetInstance ke AudioEmitter baru Anda untuk menentukan bahwa Anda ingin kawat tersebut membawa audio ke emitter audio spesifik ini dalam air terjun.
  6. Kembali ke jendela Explorer, sisipkan Script ke dalam WaterfallAudioObject, ganti namanya menjadi LoopWaterfallMusic, atur properti RunContext ke Client, lalu tempel kode berikut ke dalam skrip:


    local audioPlayer = script.Parent
    audioPlayer:Play()

    Skrip mulai dengan mendeklarasikan sebuah variabel untuk merepresentasikan induk skrip AudioPlayer. Skrip kemudian mengatur sumber audio untuk diputar dari saat pemain bergabung dalam pengalaman hingga saat mereka keluar dari pengalaman.

  7. Uji coba pengalaman untuk mendengar suara hujan cokelat yang berulang ketika avatar Anda berada dekat air terjun. Ketika Anda memutar kepala karakter Anda untuk melihat ke arah lain, suara berpindah secara dinamis di speaker dunia nyata Anda sesuai dengan posisi emitter di ruang 3D.

Audio satu kali

Audio 3D satu kali, atau audio directional yang diputar sekali pada waktu dan posisi tertentu kecuali pemain memicunya lagi, memberikan pemain konteks tentang tindakan mereka, lingkungan, dan karakter yang ada di sekitar mereka. Menggunakan jenis umpan balik auditori ini dalam pengalaman Anda sangat penting karena memungkinkan pemain untuk membuat keputusan strategis seperti menghindari musuh yang mendekat atau mengambil item yang berguna.

Bagian berikut memberikan rincian implementasi untuk skenario gameplay umum di mana pemain perlu umpan balik directional yang tepat waktu, termasuk peristiwa gameplay situasional, interaksi objek, dan dialog karakter non-playable.

Umpan balik peristiwa

Saat pemain memicu peristiwa situasional kunci dalam lingkungan mereka, seperti membuka area gameplay baru atau memicu tembakan musuh, penting bagi mereka untuk memahami di mana dalam ruang 3D mereka perlu memfokuskan perhatian mereka. Jika mereka tidak menerima umpan balik auditori segera, mereka mungkin melewatkan informasi yang penting untuk gameplay mereka, yang mengarah pada frustrasi karena tidak mengetahui ke mana harus pergi atau apa yang harus dilakukan selanjutnya.

Untuk mendemonstrasikan mengapa ini penting, mari kita tinjau audio 3D satu kali dari template Laser Tag yang diputar dari blaster setiap pemain:

  • Suara pop dalam diputar untuk setiap tembakan yang pemain buat dari blaster mereka.
  • Suara klik dan beep robotik diputar setiap kali pemain mengisi ulang blaster mereka dengan peluru baru.

Kedua suara ini memberikan kesadaran situasional dengan memberi tahu semua pemain di sekitar tentang arah dari mana tembakan datang sehingga mereka dapat membuat keputusan yang tepat untuk bergabung dalam kesenangan atau menghindari bahaya potensial.

Contoh tersebut menggunakan teknik yang sama untuk memberikan kesadaran situasional kepada pemain tentang penghargaan mereka setelah menyelesaikan tujuan utama dalam pengalaman. Setelah mereka mengumpulkan ketiga gumdrop, pintu rumah roti jahe terbuka untuk memberi pemain akses ke presentasi di dalam.

Karena tidak ada urutan khusus yang perlu diikuti pemain untuk mengumpulkan gumdrop, penting agar pemain menyadari pintu yang terbuka terlepas dari gumdrop mana yang mereka kumpulkan terakhir. Suara positional memungkinkan hal ini terjadi agar pemain menyadari keberhasilan mereka dan ke mana mereka perlu pergi selanjutnya terlepas dari jarak dan arah relatif mereka dari pintu.

Untuk merekonstruksi umpan balik acara audio 3D satu kali dalam file tempat Gingerbread House - Complete Audio:

  1. Di jendela Explorer, navigasikan ke WorkspaceDoor, kemudian:

    1. Sisipkan objek AudioPlayer untuk membuat sumber audio untuk volume.
    2. Sisipkan objek AudioEmitter untuk memancarkan aliran posisi dari Door.
    3. Sisipkan objek Wire untuk membawa aliran dari audio player ke audio emitter.
  2. Pilih AudioPlayer, lalu di jendela Properties, atur AssetID ke rbxassetid://5930776613 untuk memainkan trek audio gerbang logam geser.

  3. Pilih Wire, lalu di jendela Properties,

    1. Atur SourceInstance ke AudioPlayer baru Anda untuk menentukan bahwa Anda ingin kawat membawa audio dari player audio spesifik ini.
    2. Atur TargetInstance ke AudioEmitter baru Anda untuk menentukan bahwa Anda ingin kawat membawa audio ke emitter audio spesifik ini dalam volume.
  4. Kembali ke jendela Explorer, navigasikan ke ServerScriptService, kemudian sisipkan Script, ganti namanya menjadi GumdropService, atur properti RunContext ke Server, lalu tempel kode berikut ke dalam skrip:


    -- Menginisialisasi variabel
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local ServerStorage = game:GetService("ServerStorage")
    local TweenService = game:GetService("TweenService")
    -- Modul
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- Variabel
    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)
    -- Memperbarui tabel gumdrop
    local newGumdropAmount = PlayerData.updateValue(player, GUMDROP_KEY_NAME, updateFunction)
    -- Memperbarui papan peringkat gumdrop
    Leaderboard.setStat(player, GUMDROP_KEY_NAME, newGumdropAmount)
    -- Memeriksa apakah pemain telah mengumpulkan tiga gumdrop
    if newGumdropAmount >= 3 then
    -- Memutar audio peristiwa pintu saat pemain mengumpulkan tiga gumdrop
    local audioPlayer = Workspace.Door.AudioPlayer
    audioPlayer:Play()
    -- Menggerakkan pintu ke bawah
    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
    -- Mendefinisikan handler peristiwa
    local function onGumdropTouched(otherPart, gumdrop)
    if gumdrop:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- Pemain menyentuh 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("Pemain mengumpulkan gumdrop")
    end
    end
    end
    -- Mengatur pendengar peristiwa
    for _, gumdrop in gumdrops do
    gumdrop:SetAttribute("Enabled", true)
    gumdrop.Touched:Connect(function(otherPart)
    onGumdropTouched(otherPart, gumdrop)
    end)
    end

    Skrip ini mulai dengan menginisialisasi Workspace, Players, ServerStorage, dan TweenService untuk dapat mereferensikan anak-anak dan fungsionalitas mereka. Kemudian, ia memerlukan modul Leaderboard dan PlayerData di dalam ServerStorage; modul-modul ini bertanggung jawab untuk membuat dan memperbarui papan peringkat di sudut kanan atas layar yang melacak jumlah gumdrop yang dikumpulkan pemain dalam lingkungan.

    Fungsi updatePlayerGumdrops dari skrip adalah di mana sebagian besar pekerjaan dilakukan untuk memicu audio 3D untuk umpan balik peristiwa, dan ia menerima dua argumen:

    • player - Seorang pemain yang mengumpulkan gumdrop.
    • updateFunction - Fungsi callback yang memperbarui jumlah gumdrop yang dikumpulkan pemain.

    Ketika seorang pemain bertabrakan dengan sebuah gumdrop, skrip:

    • Mendapatkan nilai jumlah pengumpulan gumdrop baru pemain dengan memanggil fungsi PlayerData.updateValue.
    • Memperbarui papan peringkat dengan jumlah baru ini dengan memanggil fungsi Leaderboard.setStat.
    • Memeriksa apakah jumlahnya lebih besar atau sama dengan 3.

    Ketika nilai ini lebih besar atau sama dengan 3, skrip:

    • Memutar trek audio 3D dari pemutar audio ke emitter audio.
    • Menggerakkan pintu secara linier 15 stud di bawah posisi saat ini.

    Sisa skrip sebagian besar bertanggung jawab untuk mendeteksi apa pun yang bertabrakan dengan gumdrop adalah seorang pemain sehingga dapat memicu suara non-posisional untuk umpan balik pengumpulan. Untuk informasi lebih lanjut tentang bagian ini dari skrip, lihat Tambahkan audio 2D - Umpan balik gameplay.

  5. Uji coba pengalaman untuk mendengar suara gerbang geser setelah Anda mengumpulkan semua tiga gumdrop di lingkungan. Ketika Anda memutar kamera, suara berpindah secara dinamis di speaker dunia nyata Anda sehingga Anda mendengarnya sesuai dengan posisi emitter di ruang 3D.

Interaksi objek

Ketika pemain berinteraksi dengan objek 3D di dalam lingkungan mereka, seperti menyalakan sakelar lampu atau mengambil senjata, penting untuk memberikan umpan balik instan sehingga mereka secara intuitif memahami bagaimana mereka berinteraksi dengan objek. Pasangan antara umpan balik visual dan auditori memperkuat hubungan sebab dan akibat antara tindakan pemain dan respons lingkungan.

Untuk memperluas konsep ini, mari kita tinjau audio 3D satu kali berikut dari contoh Plant untuk alur pengguna menanam kubis:

  • Suara denting lembut diputar saat pemain menanam benih.
  • Suara percikan basah diputar saat pemain menyiram tanaman mereka yang tumbuh.
  • Suara jepitan diputar saat pemain mengumpulkan tanaman yang telah tumbuh penuh.
  • Suara lembut diputar saat pemain menempatkan kubis ke dalam kereta.

Semua suara ini memperkuat prompt kedekatan interaksi kunci pemain dengan objek yang berubah bentuk di ruang 3D. Bagi pemain dengan gangguan penglihatan di mana perubahan warna atau animasi lebih sulit untuk diuraikan sendiri, memberikan berbagai bentuk umpan balik sensorik membantu interaksi objek 3D Anda tetap dapat diakses dan intuitif bagi sebanyak mungkin pemain.

Untuk memberikan contoh lain tentang cara Anda dapat mengonfigurasi interaksi objek dengan berbagai bentuk umpan balik sensorik, contoh ini memberikan umpan balik visual dan auditori setiap kali pemain menginjak tombol peppermint 3D di dalam rumah roti jahe. Ketika pemain tidak berinteraksi dengan tombol, tombol tersebut tampak seperti permen peppermint biasa, tetapi ketika mereka menginjak tombol, contoh ini:

  • Memutar trek audio jingle perayaan.
  • Mengubah warna sisi tombol dengan hue hijau.
  • Menggerakkan tombol ke dalam tanah.

Dari sini, Anda dapat menghubungkan interaksi ini ke berbagai tindakan unik dalam gameplay, seperti membuka item atau memicu kemampuan khusus.

Tampilan default
Status ditekan

Untuk merekonstruksi audio interaksi objek 3D satu kali dalam file tempat Gingerbread House - Complete Audio:

  1. Di jendela Explorer, navigasikan ke Workspace3DAudioButton, kemudian:

    1. Sisipkan objek AudioPlayer untuk membuat sumber audio untuk tombol.
    2. Sisipkan objek AudioEmitter untuk memancarkan aliran posisi dari 3DAudioButton.
    3. Sisipkan objek Wire untuk membawa aliran dari audio player ke audio emitter.
  2. Pilih AudioPlayer, lalu di jendela Properties, atur AssetID ke rbxassetid://1846248593 untuk memainkan trek audio ceria perayaan.

  3. Pilih Wire, lalu di jendela Properties,

    1. Atur SourceInstance ke AudioPlayer baru Anda untuk menentukan bahwa Anda ingin kawat membawa audio dari player audio spesifik ini.
    2. Atur TargetInstance ke AudioEmitter baru Anda untuk menentukan bahwa Anda ingin kawat membawa audio ke emitter audio spesifik ini dalam tombol.
  4. Kembali ke jendela Explorer, sisipkan Script ke dalam 3DAudioButton, ganti namanya menjadi PlayAudioWhenPressed, lalu tempel kode berikut ke dalam skrip:


    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 = {
    -- Ditekan
    [true] = TweenService:Create(buttonPart, tweenInfo, {
    Size = buttonPart.Size / Vector3.new(2, 1, 1),
    Color = Color3.fromRGB(75, 151, 75),
    }),
    -- Default
    [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)

    Skrip ini mulai dengan mendapatkan:

    • TweenService sehingga dapat menganimasi bagian tombol yang menonjol dari tanah.
    • Model skrip induk 3DAudioButton.
    • Bagian tombol yang menonjol dari tanah.
    • Pemutar audio yang relevan dengan trek suara perayaan Anda.

    Skrip kemudian mendefinisikan:

    • Objek TweenInfo yang menentukan bahwa animasi tombol akan dimainkan dengan gaya animasi eksponensial.
    • Dua tween yang mewakili status tombol ditekan atau tidak ditekan.
      • Status ditekan yaitu true menggerakkan tombol sedikit ke bawah ke dalam tanah dan memberi tint sisi bagian dengan hue hijau.
      • Status tidak ditekan yaitu false menggerakkan tombol kembali ke posisi asli dan menghapus tint sebelumnya.

    Sisa skrip adalah di mana sebagian besar pekerjaan dilakukan untuk umpan balik interaksi objek, jadi mari kita tinjau bagaimana fungsi onIsPlayingChanged dan pendengar peristiwa bekerja bersama:

    1. buttonPart.Touched mendengarkan untuk pemain menyentuh tombol, kemudian memanggil fungsi Play() untuk mulai memutar audio yang terkait dari pemutar audio. Proses ini mengubah properti AudioPlayer.IsPlaying dari false menjadi true.
    2. buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying") mendengarkan perubahan properti IsPlaying pada pemutar audio, kemudian memanggil fungsi onIsPlayingChanged.
    3. Fungsi onIsPlayingChanged menggunakan informasi ini untuk memicu tween yang mengubah penampilan visualnya dalam ruang 3D.
    4. Untuk mencegah pemain secara tidak sengaja memulai ulang audio jika mereka cepat melompat ke tombol dalam urutan cepat, buttonPressedAudioPlayer.Ended mendengarkan pemutar audio selesai bermain sebelum memanggil fungsi onIsPlayingChanged lagi.

    Penting untuk dicatat bahwa peristiwa onIsPlayingChanged hanya memicu ketika berpindah dari false ke true, yang berarti bahwa itu tidak memicu saat berpindah dari true ke false. Ini adalah perilaku yang diinginkan karena komplikasi dengan waktu mereplikasi properti dari server ke klien. Karena itu, peristiwa Ended disediakan dan didengarkan dalam contoh ini untuk mencakup kedua kasus.

  5. Uji coba pengalaman untuk mendengar suara perayaan ketika karakter pemain Anda menyentuh tombol 3D di dalam rumah roti jahe. Ketika Anda menjauh dari tombol, volume suara berkurang.

Dialog karakter

Memberikan audio directional dari karakter non-playable (NPC) Anda membantu mengarahkan pemain menuju titik menarik di dalam lingkungan mereka, dan menambah kedalaman pada interaksi mereka dengan karakter lain. Bahkan, dalam pengalaman yang didorong naratif, banyak perancang secara strategis menggunakan dialog karakter untuk mengajarkan pemain tentang karakter mereka, karakter sekutu dan musuh, atau dunia itu sendiri.

Contoh umum dari teknik ini meliputi:

  • Gaya dialog untuk menetapkan nada pengalaman Anda.
  • Banter untuk mengajarkan pemain tentang hubungan karakter.
  • Percakapan musuh untuk mengakui motivasi atau posisi mereka terkait pemain.
  • Karakter pemain yang menyuarakan pikiran mereka untuk dengan lembut mengarahkan pemain kepada apa yang harus mereka lakukan selanjutnya, seperti menyembuhkan diri mereka, berpindah ke lokasi lain, atau menemukan item.
  • Karakter sekutu yang berbicara dengan karakter pemain untuk mengungkap detail dunia dalam pengalaman seperti sejarah, budaya, dan masalah sosial.

Untuk mendemonstrasikan apa yang dapat terlihat seperti dalam praktik, mari kita tinjau audio 3D satu kali berikut dari showcase Beyond the Dark yang diputar secara berkala ketika pemain berada di area lobi utama stasiun luar angkasa.

Menggunakan stasiun luar angkasa sebagai karakter, klip dialog ini memberikan konteks dan lore penting bagi pemain tentang pengaturan secara keseluruhan. Misalnya, dari kalimat tunggal ini pemain belajar:

  • Mereka berada di luar angkasa, khususnya di stasiun luar angkasa bernama Kerr-Newman Deep Space Relay 14.
  • Lingkungan mereka futuristik dan menyambut.
  • Mereka adalah pengunjung dan kemungkinan akan segera pergi.

Detail ini bersama-sama membenamkan pemain dalam lingkungan mereka, dan menambah rasa urgensi pada misi mereka. Namun, jika pemain tidak tahu apa misi utama mereka, Anda juga dapat menggunakan dialog karakter untuk memberi tahu pemain apa yang Anda ingin mereka lakukan dalam pengalaman Anda.

Untuk menggambarkan, contoh tersebut menggunakan volume, atau wilayah tak terlihat dalam ruang 3D, untuk memicu dialog karakter dari manusia salju untuk mengarahkan pemain mengumpulkan tiga gumdrop untuk membuka pintu rumahnya. Sebagai salah satu hal pertama yang pemain lihat saat mereka bergabung dalam pengalaman, pemain lebih cenderung memicu dialog dan mengetahui apa yang perlu mereka lakukan untuk berhasil.

Volume di sekitar manusia salju menggunakan umpan balik tabrakan untuk memutar audio saat pemain memasuki wilayah 3D.

Untuk merekonstruksi audio dialog karakter 3D satu kali dalam file tempat Gingerbread House - Complete Audio:

  1. Di jendela Explorer, navigasikan ke WorkspaceDialogueVolume, kemudian:

    1. Sisipkan objek AudioPlayer untuk membuat sumber audio untuk volume.
    2. Sisipkan objek AudioEmitter untuk memancarkan aliran posisi dari DialogueVolume.
    3. Sisipkan objek Wire untuk membawa aliran dari audio player ke audio emitter.
  2. Pilih AudioPlayer, lalu di jendela Properties, atur AssetID ke rbxassetid://92917410841704 untuk memainkan trek audio instruksional untuk tujuan pengalaman.

  3. Pilih Wire, lalu di jendela Properties,

    1. Atur SourceInstance ke AudioPlayer baru Anda untuk menentukan bahwa Anda ingin kawat membawa audio dari player audio spesifik ini.
    2. Atur TargetInstance ke AudioEmitter baru Anda untuk menentukan bahwa Anda ingin kawat membawa audio ke emitter audio spesifik ini di volume.
  4. Kembali ke jendela Explorer, navigasikan ke StarterPlayerStarterCharacterScripts, sisipkan LocalScript, ganti namanya menjadi PlayAudioWhenInVolume, dan tempel kode berikut ke dalam skrip lokal:


    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)

    Skrip ini mulai dengan mendapatkan layanan Workspace dan Players sehingga dapat merujuk anak-anak dan fungsionalitas mereka. Untuk setiap karakter pemain yang dimuat atau respawn kembali ke dalam pengalaman, skrip menunggu:

    • Humanoid dan objek Animator karakter.
    • Volume objek di workspace yang bernama DialogueVolume.

    Ketika apapun bertabrakan dengan volume, fungsi penangan peristiwa Touched mendapatkan induk pertama yang merupakan Model, yang seharusnya adalah karakter jika BasePart yang bertabrakan dengan volume adalah turunan dari model karakter. Jika demikian, fungsi kemudian:

    • Mengatur debounce ke true.
    • Memutar dan menunggu audio hingga selesai.
    • Mengatur debounce kembali ke false.

    Mengatur debounce dari false ke true lalu kembali ke false setelah audio selesai diputar adalah pola debounce yang mencegah audio memicu berulang kali saat pemain terus bertabrakan dengan volume. Untuk informasi lebih lanjut tentang pola debounce ini, lihat Debounce - Mendetect tabrakan.

  5. Uji coba pengalaman untuk mendengar dialog karakter instruksional saat karakter pemain Anda menyentuh volume di sekitar manusia salju.

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