Audio 3D adalah suara directional yang dipancarkan dari lokasi tertentu di ruang 3D, meningkat atau menurun dalam volume tergantung pada jarak dan orientasi antara pemancar audio dan pendengar. Ini berarti bahwa saat pendengar atau pemancar bergerak di sekitar lingkungan, pemain dapat mendengar audio tersebut secara dinamis dari berbagai arah dan tingkat volume.
Menggunakan file Gingerbread House - Start .rbxl sebagai tempat awal dan Gingerbread House - Complete Audio sebagai referensi, tutorial ini menunjukkan cara menambahkan audio 3D baik yang berulang maupun satu kali ke dalam permainan Anda, termasuk panduan tentang:
- Suara lingkungan yang berulang yang diputar segera setelah pemain terhubung ke server.
- Memicu audio untuk memberi tahu pemain tentang peristiwa situasional kunci yang penting untuk permainan mereka.
- Mengaktifkan audio untuk memberikan umpan balik auditori kepada pemain saat mereka berinteraksi dengan objek 3D.
- Memutar suara karakter yang menarik dan membimbing pemain menuju titik-titik menarik dalam lingkungan mereka.
Jika pada suatu titik 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 seperti rekan-rekan mereka di dunia nyata. Mari kita lihat bagaimana ini bekerja dalam praktik menggunakan contoh seorang pemain yang mengenakan headset saat bermain game dengan laptop mereka:
- Objek AudioPlayer memuat ID aset audio 1516791621 ke dalam game untuk trek hujan.
- Objek AudioEmitter memancarkan aliran audio trek hujan ke dalam lingkungan 3D.
- Objek anak AudioListener karakter mendengarkan suara tersebut dalam lingkungan 3D dan mengirimkannya 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 mengirimkannya kembali ke dalam game untuk obrolan suara.


Bagian berikut menyelami lebih dalam dan merujuk pada objek-objek ini saat Anda belajar bagaimana memutar audio 3D baik yang berulang maupun satu kali. Saat Anda meninjau objek-objek ini dengan teknik yang akan datang, Anda dapat lebih akurat memprediksi bagaimana menangkap dan mengirim suara dari game ke pemain dan sebaliknya.
Audio berulang
Audio 3D berulang, atau audio directional yang diulang 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 berulang menjaga sumber suara lingkungan Anda tetap konsisten, seperti statis televisi atau gemuruh air terjun; jika suara-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 berulang selesai. Sementara suara air awalnya membenamkan pemain ke dalam lingkungan luar ruangan, perubahan auditori yang tiba-tiba terasa mengganggu dan tidak alami dengan bagaimana air terjun berperilaku di dunia nyata.
Demikian pula, contoh ini menggunakan teknik ini untuk aliran air terjun cokelat yang mengalir, dan menyesuaikan volumenya sesuai dengan jarak pemain dari pemancar audio. Ketika pemain berada kurang dari 20 stud, pemancar memancarkan suara dengan volume penuh. Saat pemain bergerak lebih jauh, audio yang berdesir menurun dalam volume setiap 20 stud dari pemancar audio. Ini meniru suara dunia nyata yang menurun dalam volume semakin jauh Anda dari sumbernya.
Untuk mereproduksi audio 3D berulang dalam file tempat Gingerbread House - Complete Audio:
Aktifkan pendengar default yang terpasang pada karakter pemain Anda.
- Di jendela Explorer, pilih SoundService.
- Di jendela Properties, atur DefaultListenerLocation ke Character. Ketika Anda menjalankan game, mesin secara otomatis:
- Membuat AudioListener di bawah Humanoid.RootPart setiap karakter pemain sehingga Anda dapat mendengar suara berpindah di speaker dunia nyata Anda sesuai dengan posisi dan skala sumber suara dalam game.
- Membuat AudioDeviceOutput di bawah SoundService.
Di jendela Explorer, navigasikan ke Workspace ⟩ WaterfallAudioObject, kemudian:
- Masukkan objek AudioPlayer untuk membuat sumber audio untuk air terjun.
- Masukkan objek AudioEmitter untuk memancarkan aliran posisi dari WaterfallAudioObject.
- Masukkan objek Wire untuk membawa aliran dari pemutar audio ke pemancar audio.

Pilih AudioPlayer, kemudian di jendela Properties,
- Atur AssetID ke rbxassetid://1516791621 untuk memutar trek audio hujan.
- Aktifkan Looping sehingga audio diulang tanpa henti.
Pilih AudioEmitter, kemudian di jendela Properties, atur DistanceAttenuation ke {0: 1}, {20: 0.8}, {40: 0.4}, {80: 0} sehingga suara secara progresif menurun dalam volume setiap 20 stud dari pemancar audio.
Pilih Wire, kemudian di jendela Properties,
- Atur SourceInstance ke AudioPlayer baru Anda untuk menentukan bahwa Anda ingin kabel membawa audio dari pemutar audio spesifik ini.
- Atur TargetInstance ke AudioEmitter baru Anda untuk menentukan bahwa Anda ingin kabel membawa audio ke pemancar audio spesifik ini dalam air terjun.
Kembali ke jendela Explorer, masukkan Script ke dalam WaterfallAudioObject, ganti namanya menjadi LoopWaterfallMusic, atur properti RunContext ke Client, kemudian tempelkan kode berikut ke dalam skrip:
local audioPlayer = script.ParentaudioPlayer:Play()Penjelasan kodeSkrip ini dimulai dengan mendeklarasikan variabel untuk mewakili induk skrip AudioPlayer. Skrip kemudian mengatur sumber audio untuk diputar dari saat pemain bergabung dengan game hingga saat mereka keluar dari game.
Uji coba game untuk mendengar suara hujan cokelat yang berulang ketika avatar Anda berada dekat air terjun. Ketika Anda memutar kepala karakter Anda untuk melihat ke arah yang berbeda, suara secara dinamis berpindah di speaker dunia nyata Anda sesuai dengan posisi pemancar 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 konteks kepada pemain tentang tindakan mereka, lingkungan, dan karakter yang ada di sekitar mereka. Menggunakan jenis umpan balik auditori ini dalam permainan Anda sangat penting karena memungkinkan pemain untuk membuat keputusan strategis seperti menghindari musuh yang datang atau mengambil item yang berguna.
Bagian berikut memberikan detail implementasi untuk skenario gameplay umum di mana pemain membutuhkan 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, sangat penting bahwa mereka memahami di mana dalam ruang 3D mereka perlu mengarahkan fokus dan 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 tahu 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 yang diputar untuk setiap tembakan yang pemain tembak dari blaster mereka.
- Suara klik dan bip robotik diputar setiap kali pemain mengisi ulang blaster mereka dengan peluru baru.
Kedua suara ini memberikan kesadaran situasional dengan memberi tahu semua pemain terdekat tentang arah dari mana tembakan berasal sehingga mereka dapat membuat keputusan yang tepat untuk bergabung dalam kesenangan atau menghindari bahaya potensial.
Contoh ini menggunakan teknik yang sama untuk memberikan kesadaran situasional kepada pemain tentang hadiah mereka setelah menyelesaikan tujuan utama dalam game. Setelah mereka mengumpulkan semua tiga gumdrops, pintu rumah jahe terbuka untuk memungkinkan pemain mengakses hadiah di dalamnya.
Karena tidak ada urutan tertentu yang perlu diikuti pemain untuk mengumpulkan gumdrops, penting bahwa pemain menyadari pintu yang terbuka tidak peduli gumdrop mana yang mereka kumpulkan terakhir. Suara positional membuat ini mungkin sehingga pemain menyadari keberhasilan mereka dan ke mana mereka perlu pergi selanjutnya terlepas dari jarak dan arah relatif mereka dari pintu.
Untuk mereproduksi umpan balik audio 3D satu kali dalam file tempat Gingerbread House - Complete Audio:
Di jendela Explorer, navigasikan ke Workspace ⟩ Door, kemudian:
- Masukkan objek AudioPlayer untuk membuat sumber audio untuk volume.
- Masukkan objek AudioEmitter untuk memancarkan aliran posisi dari Door.
- Masukkan objek Wire untuk membawa aliran dari pemutar audio ke pemancar audio.

Pilih AudioPlayer, kemudian di jendela Properties, atur AssetID ke rbxassetid://5930776613 untuk memutar trek audio gerbang logam yang meluncur.
Pilih Wire, kemudian di jendela Properties,
- Atur SourceInstance ke AudioPlayer baru Anda untuk menentukan bahwa Anda ingin kabel membawa audio dari pemutar audio spesifik ini.
- Atur TargetInstance ke AudioEmitter baru Anda untuk menentukan bahwa Anda ingin kabel membawa audio ke pemancar audio spesifik ini dalam volume.
Kembali ke jendela Explorer, navigasikan ke ServerScriptService, kemudian masukkan Script, ganti namanya menjadi GumdropService, atur properti RunContext ke Server, kemudian tempelkan kode berikut ke dalam skrip:
-- Menginisialisasi variabellocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local ServerStorage = game:GetService("ServerStorage")local TweenService = game:GetService("TweenService")-- Modullocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Variabellocal gumdropsFolder = Workspace.Gumdropslocal gumdrops = gumdropsFolder:GetChildren()local GUMDROP_KEY_NAME = PlayerData.GUMDROP_KEY_NAMElocal GUMDROP_AMOUNT_TO_ADD = 1local function updatePlayerGumdrops(player, updateFunction)-- Memperbarui tabel gumdroplocal newGumdropAmount = PlayerData.updateValue(player, GUMDROP_KEY_NAME, updateFunction)-- Memperbarui papan peringkat gumdropLeaderboard.setStat(player, GUMDROP_KEY_NAME, newGumdropAmount)-- Memeriksa apakah pemain telah mengumpulkan tiga gumdropsif newGumdropAmount >= 3 then-- Memutar audio peristiwa pintu ketika pemain mengumpulkan tiga gumdropslocal audioPlayer = Workspace.Door.AudioPlayeraudioPlayer:Play()-- Menganimasikan pintu untuk bergerak ke bawahlocal doorPart = Workspace.Doorlocal tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Linear)local tween = TweenService:Create(doorPart, tweenInfo, {Position = doorPart.Position + Vector3.new(0, -15, 0)})tween:Play()endend-- Mendefinisikan pengendali peristiwalocal function onGumdropTouched(otherPart, gumdrop)if gumdrop:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Pemain menyentuh gumdroplocal audioPlayer = gumdrop.AudioPlayeraudioPlayer:Play()gumdrop.Transparency = 1gumdrop:SetAttribute("Enabled", false)updatePlayerGumdrops(player, function(oldGumdropAmount)oldGumdropAmount = oldGumdropAmount or 0return oldGumdropAmount + GUMDROP_AMOUNT_TO_ADDend)print("Pemain mengumpulkan gumdrop")endendend-- Mengatur pendengar peristiwafor _, gumdrop in gumdrops dogumdrop:SetAttribute("Enabled", true)gumdrop.Touched:Connect(function(otherPart)onGumdropTouched(otherPart, gumdrop)end)endPenjelasan kodeSkrip ini dimulai dengan menginisialisasi Workspace, Players, ServerStorage, dan TweenService sehingga dapat merujuk pada anak-anak dan fungsionalitas mereka. Kemudian, ia memerlukan modul Leaderboard dan PlayerData di ServerStorage; modul-modul ini bertanggung jawab untuk membuat dan memperbarui papan peringkat di sudut kanan atas layar yang melacak jumlah gumballs yang dikumpulkan pemain di lingkungan.
Fungsi updatePlayerGumdrops dalam skrip adalah tempat sebagian besar pekerjaan terjadi untuk memicu audio 3D untuk umpan balik peristiwa, dan mengambil dua argumen:
- player - Seorang pemain yang mengumpulkan gumdrop.
- updateFunction - Fungsi callback yang memperbarui jumlah gumdrop yang dikumpulkan pemain.
Ketika seorang pemain bertabrakan dengan 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 dari atau sama dengan 3.
Ketika nilai ini lebih besar dari atau sama dengan 3, skrip:
- Memutar trek audio 3D dari pemutar audio ke pemancar audio.
- Menggerakkan pintu secara linier 15 stud di bawah posisi saat ini.
Sisa skrip sebagian besar bertanggung jawab untuk mendeteksi apakah ada yang bertabrakan dengan gumdrop adalah pemain sehingga dapat memicu suara non-posisional untuk umpan balik pengumpulan. Untuk informasi lebih lanjut tentang bagian skrip ini, lihat Tambahkan audio 2D - Umpan balik gameplay.
Uji coba game untuk mendengar suara gerbang meluncur setelah Anda mengumpulkan semua tiga gumdrops di lingkungan. Ketika Anda memutar kamera, suara secara dinamis berpindah di speaker dunia nyata Anda sehingga Anda mendengarnya sesuai dengan posisi pemancar di ruang 3D.
Interaksi objek
Ketika pemain berinteraksi dengan objek 3D dalam lingkungan mereka, seperti menyalakan saklar lampu atau mengambil senjata, penting untuk memberikan umpan balik instan sehingga mereka secara intuitif memahami bagaimana mereka berinteraksi dengan objek tersebut. 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 berkebun kubis:
- Suara dentingan lembut diputar ketika pemain menanam benih.
- Suara percikan basah diputar ketika pemain menyiram tanaman yang sedang tumbuh.
- Suara potong diputar ketika pemain mengumpulkan tanaman yang sudah tumbuh.
- Suara lembut diputar ketika pemain meletakkan kubis ke dalam kereta.
Semua suara ini memperkuat prompt kedekatan interaksi kunci pemain dengan objek yang berubah bentuk dalam ruang 3D. Bagi pemain dengan gangguan penglihatan di mana perubahan warna atau animasi lebih sulit untuk dipahami sendiri, memberikan beberapa bentuk umpan balik sensorik ini membantu interaksi objek 3D Anda tetap dapat diakses dan intuitif bagi sebanyak mungkin pemain.
Untuk memberikan contoh berbeda tentang bagaimana Anda dapat mengonfigurasi interaksi objek dengan beberapa bentuk umpan balik sensorik, contoh ini memberikan umpan balik visual dan auditori setiap kali pemain menginjak tombol peppermint 3D di dalam rumah jahe. Ketika pemain tidak berinteraksi dengan tombol, itu terlihat seperti permen peppermint biasa, tetapi ketika mereka menginjak tombol, contoh ini:
- Memutar trek audio jingle perayaan.
- Mewarnai sisi tombol dengan nuansa hijau.
- Menggerakkan tombol ke dalam tanah.
Dari sini, Anda dapat menghubungkan interaksi ini ke berbagai tindakan gameplay unik, seperti membuka item atau memicu kemampuan khusus.


Untuk mereproduksi audio interaksi objek 3D satu kali dalam file tempat Gingerbread House - Complete Audio:
Di jendela Explorer, navigasikan ke Workspace ⟩ 3DAudioButton, kemudian:
- Masukkan objek AudioPlayer untuk membuat sumber audio untuk tombol.
- Masukkan objek AudioEmitter untuk memancarkan aliran posisi dari 3DAudioButton.
- Masukkan objek Wire untuk membawa aliran dari pemutar audio ke pemancar audio.

Pilih AudioPlayer, kemudian di jendela Properties, atur AssetID ke rbxassetid://1846248593 untuk memutar trek audio ceria dan meriah.
Pilih Wire, kemudian di jendela Properties,
- Atur SourceInstance ke AudioPlayer baru Anda untuk menentukan bahwa Anda ingin kabel membawa audio dari pemutar audio spesifik ini.
- Atur TargetInstance ke AudioEmitter baru Anda untuk menentukan bahwa Anda ingin kabel membawa audio ke pemancar audio spesifik ini dalam tombol.
Kembali ke jendela Explorer, masukkan Script ke dalam 3DAudioButton, ganti namanya menjadi PlayAudioWhenPressed, kemudian tempelkan kode berikut ke dalam skrip:
local TweenService = game:GetService("TweenService")local buttonModel = script.Parent.Parentlocal buttonPart = buttonModel.ButtonPartlocal buttonPressedAudioPlayer = buttonModel.ButtonPressedAudioPlayerlocal 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.IsPlayinglocal tween = buttonTweenByIsPressed[isPlaying]tween:Play()endonIsPlayingChanged()buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying"):Connect(onIsPlayingChanged)buttonPressedAudioPlayer.Ended:Connect(onIsPlayingChanged)buttonPart.Touched:Connect(function(_hit)buttonPressedAudioPlayer:Play()end)Penjelasan kodeSkrip ini dimulai dengan mendapatkan:
- TweenService sehingga dapat menganimasikan bagian tombol yang menonjol dari tanah.
- Model 3DAudioButton induk skrip.
- 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 diputar dengan gaya animasi eksponensial.
- Dua tween yang mewakili keadaan tombol yang ditekan atau tidak ditekan.
- Keadaan ditekan true menggerakkan tombol sedikit ke bawah ke dalam tanah dan mewarnai sisi bagian dengan nuansa hijau.
- Keadaan tidak ditekan false mengembalikan tombol ke posisi aslinya dan menghapus nuansa sebelumnya.
Sisa skrip adalah tempat sebagian besar pekerjaan terjadi untuk umpan balik interaksi objek, jadi mari kita tinjau bagaimana fungsi onIsPlayingChanged dan pendengar peristiwa bekerja sama:
- buttonPart.Touched mendengarkan pemain untuk menyentuh tombol, kemudian memanggil fungsi Play() untuk mulai memutar audio terkait dari pemutar audio. Proses ini mengubah properti AudioPlayer.IsPlaying dari false menjadi true.
- buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying") mendengarkan perubahan properti IsPlaying pemutar audio, kemudian memanggil fungsi onIsPlayingChanged.
- Fungsi onIsPlayingChanged menggunakan informasi ini untuk memicu tween yang mengubah penampilan visualnya dalam ruang 3D.
- Untuk mencegah pemain secara tidak sengaja memulai ulang audio jika mereka melompat cepat di tombol dalam urutan cepat, buttonPressedAudioPlayer.Ended mendengarkan pemutar audio untuk menyelesaikan pemutaran sebelum memanggil fungsi onIsPlayingChanged lagi.
Penting untuk dicatat bahwa peristiwa onIsPlayingChanged hanya dipicu ketika berubah dari false menjadi true, yang berarti bahwa tidak dipicu ketika berubah dari true menjadi false. Ini adalah perilaku yang dimaksudkan karena komplikasi dengan waktu mereplikasi properti dari server ke klien. Karena ini, peristiwa Ended disediakan dan didengarkan dalam contoh ini untuk mencakup kedua kasus.
Uji coba game untuk mendengar suara perayaan ketika karakter pemain Anda menyentuh tombol 3D di dalam rumah jahe. Ketika Anda menjauh dari tombol, volume suara menurun.
Dialog karakter
Memberikan audio directional dari karakter non-playable (NPC) Anda sangat membantu untuk membimbing pemain menuju titik-titik menarik dalam lingkungan mereka, dan menambah kedalaman pada interaksi mereka dengan karakter lain. Faktanya, dalam game yang didorong oleh narasi, banyak desainer secara strategis menggunakan dialog karakter untuk secara tidak langsung mengajarkan pemain tentang karakter mereka, karakter sekutu dan musuh, atau dunia itu sendiri.
Contoh umum dari teknik ini termasuk:
- Gaya dialog untuk menetapkan nada permainan Anda.
- Banter untuk mengajarkan pemain tentang hubungan karakter.
- Percakapan musuh untuk mengungkapkan motivasi atau posisi mereka terkait dengan pemain.
- Karakter pemain yang mengungkapkan pikiran mereka dengan suara keras untuk membimbing pemain tentang apa yang harus mereka lakukan selanjutnya, seperti menyembuhkan diri mereka sendiri, bergerak ke lokasi lain, atau menemukan item.
- Karakter sekutu berbicara dengan karakter pemain untuk mengungkapkan detail dunia dalam game seperti sejarah, budaya, dan masalah sosial.
Untuk mendemonstrasikan bagaimana ini dapat terlihat 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 kepada pemain tentang pengaturan keseluruhan. Misalnya, dari satu kalimat 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 game Anda.
Untuk menggambarkan, contoh ini menggunakan volume, atau wilayah tak terlihat dalam ruang 3D, untuk memicu dialog karakter dari manusia salju untuk membimbing pemain mengumpulkan tiga gumdrops untuk membuka pintu rumahnya. Sebagai salah satu hal pertama yang dilihat pemain saat mereka bergabung dengan game, pemain lebih mungkin untuk memicu dialog dan tahu apa yang perlu mereka lakukan untuk berhasil.

Untuk mereproduksi audio dialog karakter 3D satu kali dalam file tempat Gingerbread House - Complete Audio:
Di jendela Explorer, navigasikan ke Workspace ⟩ DialogueVolume, kemudian:
- Masukkan objek AudioPlayer untuk membuat sumber audio untuk volume.
- Masukkan objek AudioEmitter untuk memancarkan aliran posisi dari DialogueVolume.
- Masukkan objek Wire untuk membawa aliran dari pemutar audio ke pemancar audio.

Pilih AudioPlayer, kemudian di jendela Properties, atur AssetID ke rbxassetid://92917410841704 untuk memutar trek audio instruksional untuk tujuan permainan.
Pilih Wire, kemudian di jendela Properties,
- Atur SourceInstance ke AudioPlayer baru Anda untuk menentukan bahwa Anda ingin kabel membawa audio dari pemutar audio spesifik ini.
- Atur TargetInstance ke AudioEmitter baru Anda untuk menentukan bahwa Anda ingin kabel membawa audio ke pemancar audio spesifik ini dalam volume.
Kembali ke jendela Explorer, navigasikan ke StarterPlayer ⟩ StarterCharacterScripts, masukkan LocalScript, ganti namanya menjadi PlayAudioWhenInVolume, dan tempelkan 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.DialogueVolumelocal trigger = humanoid:WaitForChild("Animator")local debounce = falselocal localPlayer = Players.LocalPlayervolumeDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")local hitPlayer = Players:GetPlayerFromCharacter(hitCharacter)if hitPlayer ~= localPlayer thenreturnenddebounce = truelocal audioPlayer = Workspace.DialogueVolume.AudioPlayeraudioPlayer:Play()audioPlayer.Ended:Wait()debounce = falseend)Penjelasan kodeSkrip ini dimulai dengan mendapatkan layanan Workspace dan Players sehingga dapat merujuk pada anak-anak dan fungsionalitas mereka. Untuk setiap karakter pemain yang dimuat atau respawn kembali ke dalam game, skrip menunggu:
- Objek volume di workspace bernama DialogueVolume.
Ketika apa pun bertabrakan dengan volume, fungsi pengendali peristiwa Touched mendapatkan nenek moyang pertama yang merupakan Model, yang seharusnya menjadi karakter jika BasePart yang bertabrakan dengan volume adalah keturunan dari model karakter. Jika iya, fungsi kemudian:
- Mengatur debounce ke true.
- Memutar dan menunggu audio hingga selesai.
- Mengatur debounce kembali ke false.
Mengatur debounce dari false ke true ke false lagi setelah audio selesai diputar adalah pola debounce yang mencegah audio dipicu berulang kali saat pemain terus-menerus bertabrakan dengan volume. Untuk informasi lebih lanjut tentang pola debounce ini, lihat Debounce - Deteksi tabrakan.
Uji coba game untuk mendengar dialog karakter instruksional ketika karakter pemain Anda menyentuh volume di sekitar manusia salju.