آموزش کار با صدا در یونیتی – بخش اول

آموزش کار با صدا در یونیتی – بخش اول

آموزش کار با صدا در یونیتی
بخش اول


یونیتی در قسمت اضافه کردن Component ها به یک GameObject، سربرگی به نام Audio دارد که داخل آن، کامپوننت‌های مربوط به صدا قرار گرفته‌اند؛ و مهم‌ترین این کامپوننت‌ها، Audio Listener و Audio Source می‌باشند. و در واقع کار کردن با صدا در یونیتی از آن چیزی که فکرش را بکنید ساده‌تر است؛ چراکه یونیتی کامپوننت‌های مختلفی را برای کار با صدا آماده کرده است که در ادامه به Audio Listener و Audio Source اشاره خواهیم کرد.

کامپوننت Audio Listener

وقتی پروژه‌ای ایجاد می‌کنید، به صورت پیش‌فرض، کامپوننت Audio Listener به Main Camera چسبیده است. این کامپوننت وظیفه‌ی دریافت صداهای ایجاد شده در محیط بازی و پخش آن از طریق بلندگو را برایمان دارد.

تنها یک نمونه از این کامپوننت در هر لحظه می‌تواند فعال باشد؛ یعنی شما نمی‌توانید در دو گیم آبجکت جدا از هم، این کامپوننت را به صورت همزمان فعال داشته باشید!  و همچنین از این به بعد به این کامپوننت «شنونده‌ی صوتی» خواهیم گفت.

کامپوننت Audio Source

دانستیم که کامپوننت «شنونده‌ی صوتی یا Audio Listner»، برای شنیدن صداهای ایجاد شده در صحنه طراحی شده و این صداها را از طریق بلندگو برایمان پخش می‌کند؛ و طبیعی است که ما در هرلحظه، یک محل شنیدن می‌توانیم در صحنه داشته باشیم و از آن جهت نمیتوان از این کامپوننت در یک زمان بیش‌تر از یک نمونه‌ی فعال داشت.

و حالا باید یک منبع صدا ایجاد کنیم؛ برای مثال روی یک گیم آبجکتی در صحنه، یک منبع تولید صدا قرار دهیم تا «شنونده صدا»، این صدا را بشنود. بنابراین می‌توانیم کامپوننت «Audio Source» را روی همان «Main Camera» قرار دهیم؛ ولی ما چون می‌خواهیم منبع تولید صدا از شنونده‌ی صدا جدا باشد، آن را روی یک گیم آبجکت دیگری مثل یک Cube قرار می‌دهیم.

بعد از اضافه کردن کامپوننت Audio Source به گیم آبجکت مورد نظر، یک فایل صدا (با فرمت WAV ، MP3 یا ..) درون Assets درگ کنید و سپس فایل صدا را از Assets به ویژگی Audio Clip کامپوننت Audio Source اختصاص دهید. و البته روش دیگر این است که اصلا Audio Source را به آبجکت اضافه نکنید و خود فایل صوتی را به Inspector درگ کنید تا Audio Source با آن فایل صوتی ایجاد شود. همچنین ویژگی Play On Awake را هم از منبع صدا فعال کنید تا به محض اجرای بازی، شروع به پخش صدا کند.

Audio Source برخلاف Audio Listener می‌تواند به تعداد نامحدودی درون صحنه و حتی در یک GameObject قرار داشته باشد؛ این یک امر بدیهی است که ما می‌توانیم چندین منبع تولید صدا در محیط داشته باشیم و فقط یک محل شنوایی برای دریافت آن منابع که می‌‌شود گوشهایمان (Audio Listener). اما شاید بگویید دو گوش داریم! ولی نه صبر کنید؛ Audio Listener نقش دو گوش را ایفا می‌کند؛ و شنیدن صدا از هدفون سمت راست و چپ، همچنین تغییر میزان صدا با دور شدن از منبع صدا را با ویژگی 3D کردن صدا  برایمان محقق می‌کند.

برخی ویژگی های مهم کامپوننت Audio Source

  • Mute: بی صدا باشد یا نه؟ (یعنی صدا شنیده نشود یا خفه شود!)
  • Play On Awake: صدا خود به خود از همان ابتدای شروع بازی شروع به پخش کند یا نه؟
  • Loop: بعد از اتمام دوباره از اول تکرار شود یا نه؟
  • Priority: اولویت این صدا نسبت به صداهای دیگر در صحنه.
  • Volume: میزان صدا که از 0 تا 1 می‌باشد.
  • Pitch: سرعت صدا که باعث زیر و بم شدن صدا می‌شود.
  • Stereo Pan: میزان صدا در بلندگوی راست و چپ
  • Spatial Blend: مقدار 3D بودن صدا. توجه کنید که به همان اندازه که این اهرم به سمت راست کشیده شود، صدا سه  بعدی‌تر می‌شود. به این معنی که اگر این منبع صدا را در آبجکتی قرار دهید و شنونده صدا رفته رفته از آن دور شود، صدا کم شنیده خواهد شد و همچنین تفاوت صدا در بلندگوی راست و چپ نمایان می‌شود.

اسکریپت نویسی برای Audio Source

دانستیم که فایل صدا در ویژگی AudioClip منبع صوتی قرار می گیرد. و همچنین کلاسی با نام AudioClip در یونیتی تعریف شده است. بنابراین می‌توانیم اسکریپتی بنویسیم و یک Property از جنس این کلاس تعریف کنیم و فایل صدا را به آن بدهیم. مثلا فرض کنید می‌خواهیم یک اسکریپتی بنویسیم که به صورت رندوم از یک سری صدایی که معرفی کرده‌ایم، یکی را پخش کند. در این صورت کافیست که یک آرایه‌ای از AudioClip ها تعریف کنیم، سپس یا به صورت دستی AudioClip ها را از Inspector تنظیم کنیم یا صداها را در Resources قرار دهیم و از آنجا بخوانیم (در آینده پستی درباره Resources منتشر خواهیم کرد)

در نهایت نیز کامپوننت AudioSource را داخل اسکریپتی که نوشته‌ایم دریافت کرده و اقدامات لازم را روی آن انجام می‌دهیم؛ که مهم‌ترین ویژگی‌ها و متدهای AudioSource در کدنویسی موارد زیر می‌باشند:

  • ویژگی isPlaying: فهمیدن این که صدا در حال پخش است یا نه. با این ویژگی می‌توان در متد Update، کدی نوشت که متوجه پایان پخش صوت شویم!
  • ویژگی clip: تنظیم AudioClip
  • متد Stop: توقف کامل فایل صوتی در حال پخش، بدون قابلیت Resume یا ادامه دادن از آخرین جای قطع شده.
  • متد Pause: توقف موقت فایل صوتی در حال پخش، با قابلیت Resume یا ادامه دادن از آخرین جای قطع شده.
  • متد Play: پخش از ادامه در صورت Pause بودن و پخش از اول در صورت Stop بودن.

ارور FMOD

FMOD failed to initialize the output device, attempting to initialize the null output.

فعلا دلیل اصلی این ارور برایمان مشخص نیست؛ ولی در مواردی با باز و بسته کردن پروژه درست خواهد شد!


بخش دوم فعلا منتشر نشده است.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده ۱ دیدگاه

توضیحات پیشنهادی نظرات اشتراک