Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Sound Design
Gamedevelopment

Memahami dan Melaksanakan Audio 3D di GameMaker: Studio

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Kaustina Nurul Ilmi (you can also view the original English article)

What You'll Be Creating

Audio adalah elemen penting dalam pengalaman permainan keseluruhan, dan GameMaker: Studio menyediakan cara yang agak mudah untuk anda melaksanakan audio 3D dalam projek anda.

Untuk memahami konsep audio 3D dengan lebih baik, bayangkan menambah sepasang telinga digital ke objek permainan yang dikawal oleh pemain. Apabila pemain mendekati sumber bunyi dalam permainan, jumlah sumber itu menjadi lebih kuat; apabila pemain bergerak, jumlahnya berkurangan sehingga akhirnya menjadi senyap. Kedudukan pemain yang berkaitan dengan sumber audio juga akan menghasilkan audio stereo arah, dan halaju bunyi yang digunakan pada objek bergerak boleh digunakan untuk membuat kesan Doppler .

Ciri-ciri audio yang mendalam ini boleh dicapai melalui sistem pemancar audio dan pendengar audio Dalam tutorial ini, kami akan membuat dua adegan yang menggabungkan audio 3D dengan cara yang berbeza, seperti yang dilihat dalam video demo Anda boleh memuat turun fail sumber dan demo EXE dari GitHub .

Memahami Audio 3D

Konsep yang terlibat dalam audio 3D adalah serupa di semua persekitaran pembangunan permainan, kerana ia berdasarkan peraturan dunia yang biasa: suara menjadi lebih kuat ketika anda mendekati sumber, dan bunyi yang berasal dari kanan anda akan lebih kuat di telinga kanan anda. Prinsip asas ini boleh dicapai secara manual dengan mengira keuntungan dan keluaran sumber audio berhubung dengan objek permainan tertentu, tetapi GameMaker: Studio menyediakan satu set fungsi yang kuat dan mudah digunakan yang memberikan anda kawalan langsung kepada API audio .

Pemancar

Pemancar audio bertindak sebagai sumber aset bunyi 3D di GameMaker: Studio. Pemancar ditakrifkan oleh pembolehubah yang dicipta pengguna dan kedudukan (x, y, z) yang boleh sama ada statik atau dinamik . Jumlah pemancar dikendalikan oleh nilai keuntungan dan penurunan nilai, dan kesan masa nyata boleh digunakan melalui nilai halaju dan halaju . Cara pemangkin yang menangani kehilangan audio ditentukan oleh model jarak yang digunakan. Pemancar audio berganda boleh wujud dalam adegan yang sama.

Pendengar

Pendengar audio bertindak sebagai "telinga" yang menerima bunyi 3D yang dihantar oleh pemancar. Pendengar terletak pada kedudukan (x, y, z) yang juga boleh statik atau dinamik, tetapi orientasi pendengar sama pentingnya.

Orientasi pendengar menentukan arah dan sudut yang tepat bahawa pendengar "melihat". Orientasi pendengar lalai dalam GameMaker: Hasil studio di saluran audio kiri dan kanan sedang diterbalikkan untuk Audio 3D, yang akan kami perbetulkan kemudian pada masa pelaksanaan.

Kesan Doppler

Tanpa menerangkan penjelasan Doppler yang panjang dan menyeluruh, ia boleh digambarkan sebagai perubahan kekerapan bunyi berkaitan pergerakan dan kelajuan pemancar atau pendengar. Dalam GameMaker: Studio, kesan Doppler dicapai dengan memberikan vektor kepada halaju pemancar audio atau pendengar. Untuk penjelasan yang mendalam, baca kemasukan kesan Doppler di Wikipedia .

Melaksanakan Audio 3D

Melaksanakan audio 3D dalam projek GameMaker anda adalah proses tiga langkah. Anda mesti menentukan dengan tepat pemancar dalam objek permainan sedia ada, letakkan objek ini di dalam bilik, dan beritahu pemancar kapan dan bagaimana mainkan bunyi. Anda mesti menentukan orientasi dan kedudukan pendengar dalam objek permainan sedia ada yang ada di bilik yang sama dengan pemancar.

Walau bagaimanapun, langkah pertama melibatkan mengimport dan menentukan aset audio.

Mengimport Aset

Mulakan dengan mengklik Sumber dalam bar alat GameMaker utama dan memilih Buat Bunyi dari menu lungsur. Masukkan nama untuk aset bunyi dan pilih sifat bunyi yang diingini untuk streaming dan pemampatan fail. Kemudian, dalam bahagian Pilihan Sasaran pada tetingkap Properties Sound , klik menu lungsur pertama dan pilih 3D dari senarai pilihan.

Dengan menetapkan aset ini sebagai bunyi 3D, kita boleh memanfaatkan API audio GameMaker dengan cara yang unik.

Pemancar Alat Tulis

Dalam contoh pertama kami, kami akan mencipta jenis isometrik Sim City-gaya contoh audio 3D dengan pemancar pegun. Pendengar kami akan terikat kepada objek permainan yang mengikuti kursor tetikus, dan pemancar bunyi 3D akan kekal dalam objek yang tidak bergerak. Objek ini akan diwakili oleh sekumpulan bangunan yang kecil, dan pemancar akan memainkan bunyi sekeliling bandar sekitar dengan trafik dan tanduk kereta yang sibuk.

Ini akan membolehkan kami menguji ciri-ciri drop audio audio sistem audio 3D, dan kami akan dapat lebih memahami kepentingan orientasi pendengar.

Mencipta Pendengar

Pendengar audio 3D kami akan wujud dalam objek yang mengikuti kursor tetikus. Dalam contoh ini, objek akan dikenalpasti oleh sprite yang menyerupai penanda GPS. obj_listener mengandungi dua blok kod penting: satu dalam kejadian Create , dan satu dalam peristiwa Step .

lik butang Tambah Acara dan pilih Buat untuk menambah kejadian Create ke obj_listener Seret ikon Kod obj_listener dari tab Kawalan tetingkap obj_listener ke bahagian Tindakan dalam panel acara Buat . Klik dua kali ikon Kod Execute untuk membuka editor kod GML, dan tambahkan baris kod berikut:

od ini memastikan bahawa, sebaik sahaja objek pendengar dibuat, ia akan diposisikan dalam ruang 3D untuk melihat ke arah skrin, sebelah kanan. Audio yang datang dari emitter yang terletak di sebelah kanan pendengar akan lebih hadir di pembicara yang betul, dan sebaliknya. Ini adalah persediaan standard yang anda ingin gunakan dalam hampir setiap jenis pendengar pelaksanaan di GameMaker: Studio.

Jika anda mahukan audio kiri dan kanan untuk ditukar, maka anda akan menggunakan kod berikut untuk orientasi:

Tambah peristiwa Step ke obj_listener dan seret satu lagi kod Kod obj_listener ke dalam panel Tindakan . Buka editor kod GML sekali lagi, dan masukkan garisan kod berikut: Buka editor kod GML sekali lagi, dan masukkan garisan kod berikut:

Kod ini mendapati lokasi semasa kursor tetikus dan menyerahkan koordinat ini ke kedudukan objek obj_listener Kedudukan pendengar audio juga ditentukan oleh koordinat ini. Dengan meletakkan kod ini dalam peristiwa Step , kami memastikan objek obj_listener , sprite yang menyertainya, dan pendengar sendiri sentiasa berada di lokasi yang sama, memandangkan kod acara Step dilaksanakan pada setiap bingkai semasa runtime.

( 0 dalam kod ini adalah kedudukan z pendengar. Oleh kerana permainan kami berada dalam 2D, pendengar kami akan sentiasa berada pada 0 pada paksi z.)

Buka bilik di mana anda mahu objek pendengar muncul. Klik tab Objek dan klik dalam panel untuk memaparkan senarai objek yang ada. Pilih objek pendengar anda dan klik di dalam bilik untuk meletakkannya. Kedudukan permulaan objek ini tidak penting, kerana ia akan dikemas kini untuk memadankan posisi kursor tetikus pada masa runtime.

Itulah untuk pendengar. Sekarang kita perlu membuat sesuatu untuk pendengar dapat mendengar.

Mewujudkan Pemancar

Seperti pendengar, kami akan memfokuskan secara eksklusif pada kejadian Create and Step objek pemancar. Dalam kes ini, kami akan meletakkan pemancar di objek obj_city .

Tambahkan peristiwa Create dan Step ke obj_city , dan tambah tindakan Kod obj_city untuk kedua-dua acara.

Dalam kod GML kejadian Create , tambahkan yang berikut:

( s_emit adalah nama pemancar baru kita.)

Kami memilih model dropoff jarak Jarak Eksklusif untuk contoh ini kerana ia memberikan kejatuhan keuntungan yang stabil dengan peningkatan tajam sebaik sahaja anda memenuhi titik Jarak Rujukan . Ini membolehkan jumlah audio 3D berkurangan apabila anda jauh dari objek itu, dengan lancar, tanpa sebarang lompatan yang keras, sehingga anda sangat dekat dengan sumbernya. Untuk senarai penuh model kejatuhan dan penerangan mendalam mereka, baca dokumentasi model falloff GameMaker .

audio_emitter_falloff(emitter, falloff_ref, falloff_max, falloff_factor) adalah di mana kami menyediakan sifat-sifat model falloff:

  • emitter adalah pembolehubah s_emit kami.
  • falloff_ref adalah titik di mana penurunan jumlah akan bermula.
  • falloff_max adalah titik di mana pendengar tidak lagi dapat mendengar pemancar.
  • falloff_factor adalah nombor yang digunakan dalam pengiraan audio_falloff_set_model untuk menentukan hasil penurunan. Dalam contoh kami, kami menggunakan nilai lalai 1 supaya pemancar s_emit kami akan mula jatuh apabila pendengar adalah 100 piksel jauh dari pemancar, dan pendengar tidak dapat mendengar pemancar pada jarak 300 piksel atau lebih .

audio_play_sound_on(emitter, sound, loop, priority) adalah bagaimana kita mendapatkan pemancar untuk mula memainkan bunyi 3D kami:

  • emitter adalah pembolehubah s_emit kami.
  • sound adalah audio audio snd_cityaudio kami yang kami diimport lebih awal.
  • loop menentukan sama ada bunyi ini harus diulang atau tidak.
  • priority adalah nilai dari 0 hingga 100 yang menentukan 'kepentingan' bunyi yang dimainkan-lebih besar mewakili bunyi keutamaan yang lebih tinggi.

Dalam contoh kami, kami hanya mempunyai satu bunyi yang dimainkan, jadi keutamaan tidak penting. Dan kerana kod ini dilaksanakan dalam acara Create dan kami telah memilih untuk menghidupkan bunyi, aset audio 3D ini akan dimainkan sebaik sahaja bilik dimuat, dan akan terus bermain sehingga diarahkan untuk berhenti. Dan itu membawa kita kepada langkah yang sangat penting:

Aset audio ini akan bermain walaupun anda memuat bilik lain yang tidak mengandungi pemancar . Untuk secara efektif menghentikan aset ini daripada bermain di mana-mana bilik selain daripada bilik yang mengandungi pemancar, kita perlu menambah acara Room End untuk obj_city .

Dalam panel Tindakan acara Room End , tambahkan ikon Lagi Kod Pelaksanaan dengan kod GML berikut:

Sekarang semua perkara yang perlu dilakukan adalah meletakkan obj_city objek ke dalam bilik seperti yang anda buat pendengar sebelum ini. Jalankan permainan, dan bereksperimen dengan kedudukan kursor tetikus untuk menukar lokasi pendengar berhubung dengan pemancar untuk melihat dengan tepat bagaimana audio 3D berfungsi dalam amalan.

A Moving Emitter Dengan Kesan Doppler

Dalam contoh kedua, kami akan melampirkan pemancar kepada objek yang bergerak dan menggunakan kesan Doppler semasa menggunakan objek pendengar yang sama yang kami buat sebelumnya.

Objek peluru bergerak dari sebelah kanan skrin ke kiri. Apabila peluru mencapai pinggir skrin, ia melingkari dan terus dari mana ia bermula. (Kami tidak akan mencuba bagaimana untuk mencipta pergerakan ini.) Objek peluru memancarkan bunyi gelung yang boleh digambarkan sebagai bunyi "whizzing" atau "buzzing". Apabila objek menghampiri pendengar, kekerapan bunyi akan berubah, akibat kesan Doppler.

Mewujudkan Pemancar

Tambah acara Create and a Step ke objek obj_bullet , dan tambah tindakan Code Execute untuk kedua-dua acara.

Dalam acara Create , tambahkan kod berikut kepada editor GML:

Di sini, s_emit2 adalah nama pemancar baru kami.

Pemancar ini akan menggunakan model falloff yang sama yang ditakrifkan dalam bilik sebelumnya, kerana hanya satu jenis model falloff yang boleh aktif sekaligus, dan model asal kami sesuai untuk contoh ini Ciri-ciri kejatuhan baru menggunakan rujukan falloff 25 piksel, maksimum jatuh 200 piksel, dan faktor kejatuhan sebanyak 2.5 untuk pengiraan. snd_bullet bunyi snd_bullet 3D bermula bermain sebaik sahaja objek dicipta, dengan keutamaan 1 , dan akan berlegar selama-lamanya.

Dalam editor GML acara Step , tambah baris kod ini:

Oleh kerana objek bergerak dan nilai x dan y sentiasa berubah, kedudukan pemancar juga akan dikemas kini ke kedudukan baru pada setiap langkah.

Jangan lupa untuk menambah objek peluru ke bilik, dan pastikan untuk menambah sound_stop(snd_bullet) ke acara Room End objek.

Mencipta Kesan Doppler

Sistem bunyi 3D kini tersedia untuk objek peluru, dan pendengar berfungsi dengan baik, tapi mari membuat sesuatu lebih menarik dengan efek Doppler.

Menambah kesan Doppler adalah sangat mudah, sebenarnya. Cuma buka tindakan Code Execute di obj_bullet Create event, dan tambahkan baris kod berikut:

audio_emitter_velocity(emitter, vx, vy, vz) membolehkan kita menentukan sifat-sifat kesan Doppler:

  • emitter adalah s_emit 2 kami s_emit 2 .
  • vx adalah halaju (dalam piksel setiap langkah) di sepanjang paksi-x.
  • vy ialah halaju (dalam piksel per langkah) di sepanjang paksi-y.
  • vz terpakai kepada halaju di sepanjang paksi z, tetapi permainan kami berada di 2D, jadi kami menetapkan ini kepada 0 .

Tetapan kesan Doppler tipikal menggunakan pemboleh ubah vspeed dan vspeed objek untuk menentukan nilai halaju, tetapi dalam kes ini, kita hanya menggunakan nilai -25 untuk membuat bunyi peluru yang lebih realistik. Anda boleh menguji objek dengan kod berikut untuk melihat perbezaannya:

Idea Pelaksanaan

Audio 3D boleh menambah kedalaman dan suasana yang hebat untuk projek permainan anda, dengan usaha yang minimum diperlukan. Berikut adalah beberapa contoh untuk memulakan anda:

  • Permainan hide-and-seek di mana anda perlu mendengar petunjuk audio untuk mencari objek tersembunyi.
  • Bahaya elektrik atau kebakaran di platformer yang memberi amaran kepada anda tentang bahaya apabila anda semakin dekat.
  • Permainan gaya Frogger di mana kereta mengosongkan masa anda menggunakan kesan Doppler.
  • Air terjun di dalam gua atau angin meniup melalui saluran udara untuk membawa anda ke pintu keluar.
  • Permainan mata-mata di mana anda perlu mendekati sasaran untuk mendengar perbualan.
Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.