hossein asadi
hossein asadi
خواندن ۳ دقیقه·۴ سال پیش

مدیریت ساده موزیک‌ها و افکت‌های صوتی بازی در یونیتی

اگر بخوایم بازی رو به چند بخش اصلی بزرگ که کاربر باهاش رابطه مستقیم داره و توی حس و حال بازی تاثیر زیادی میذاره تقسیم کنیم، قطعا موزیک و افکت‌های بازی جزو یکی از این بخش‌ها قرار میگیرن.

مدیریت ساده صداها و موزیک‌های بازی خیلی توی روند توسعه بازی تاثیر میذاره.

اینجا میخوام پکیجی رو بهتون معرفی کنم که توی این‌کار خیلی میتونه کمکتون کنه.


روال کار به این صورته :

یک آبجکت خالی میسازیم و اسکریپت رو میدیم بهش (لینک فایل رو ضمیمه میکنم)

بعد از اتچ کردن اسکریپت به آبجکتمون میبینیم که کامپوننت AudioSource رو به آبجکتمون اضافه کرده.

اینجا چند تا ورودی میگیره اسکریپتمون

اولیش SfxClips که همون sfxها یا افکت‌های صوتی بازیمون هستن که آرایه ای از نوع SfxAudio هستن.

مشخص میکنیم که چه تعداد افکت داریم و اینتر رو میزنیم.

هر SfxAudio دو تا ورودی میگیره، یکی تگ موزیک(همون چیزی که بعدا برای صدا زدن افکت ازش استفاده میکنیم) و بعدی یک آرایه از نوع AudioClip که همون فایلای صوتیمون هستن.

گزینه‌ی بعد MusicClips که موزیک‌های داخل بازیمون هستن و آرایه ای از نوع Audio تشریف دارن.

موزیک‌ها هم مثل افکت‌هامون دو تا ورودی میگیرن، با این تفاوت که ورودی AudioClip از نوع آرایه نیست و فقط یک مقدار میگیره.

Loop

مشخص میکنه که موزیکی که پخش میکنیم بعد از تموم شدنش دوباره پخش شه یا خیر.

AutoPlayBackgroundClip

همونطور که از اسمش مشخص اگه فعال باشه، با اجرای بازی موزیک بازی خودکار پخش میشه.


ورودی‌های بعدی دو تا آبجکت هستن(SfxToggle, MusicToggle) از نوع Toggle که برای مشخص بودن فعال و یا غیرفعال بودن موزیک و افکت‌های بازی مورد استفاده قرار میگیرن.

یعنی بعد از ران شدن گیم، تابع مربوطه چک میکنه که اگر موزیک بازی فعاله تیک Toggle رو فعال میکنه و اگر فعال نیست غیر فعال، همه‌ی اینا درباره‌ی افکت ها هم صادقه.


خب میریم سراغ نحوه استافده از این پکیج.

اول از همه میریم سراغ قطع و وصل کردن صدای موزیک و افکت ها

SoundManager.instance.MuteMusic = true | false

و برای قطع و وصل کردن صدای موزیک

SoundManager.instance.MuteSfx = true | false

برای صدای افکت هاست.


برای پخش صدای صدای افکت از این دستور استفاده میکنیم ("Click" اسم تگ افکتی هست که زمان وارد کردن تگ‌های موزیک وارد کردیم).

SoundManager.instance.PlaySfx("Click");

و یا اگر به تگمون بیشتر از یک افکت دادیم میتونیم به این شکل استفاده کنیم.

SoundManager.instance.PlaySfx("Click", 2);

که مشخص میکنه افکت مربوط به کدوم اندیس آرایه رو پخش کنه

نکته : اگر به یک تگ بیشتر از یک افکت داده باشیم و اندیس رو مشخص نکرده باشیم (حالت اول صدا زدن تابع) تابع به صورت خودکار یکی از اکت‌ها رو رندوم انتخاب و پخش میکنه.


SoundManager.instance.PlayMusic();

یک موزیک رو به صورت رندوم انتخاب و پخش میکنه.

SoundManager.instance.PlayMusic(2);

اندیس مشخص شده و انتخاب و پخش میکنه

SoundManager.instance.PlayMusic("background music tag");

و یا میتونیم با تگ موزیک اون رو پخش کنیم.


تابع MuteUnmuteSfx که میتونی به یک باتن بدیمش توی سین، صدا افکت بازی رو اگر قطع باشه وصل و وصل باشه قطع میکنه و همزمان روی آبجکت SfxToggle هم اثر میذاره و فعال یا غیرفعالش میکنه (و البته یک ورودی هم میگیره و صدای افکتی که بهش میدیم رو پخش میکنه)

تابع MuteUnmuteMusic هم دقیقا همون کارای MuteUnmuteSfx رو انجام میده با این تفاوت که روی آبجکت MusicToggle اثر میذاره و صدای موزیک بازی رو قطع و وصل میکنه.



لینک پکیج و چندتا عکس از محیط inspector اگر توجهتون رو جلب کرد.

https://github.com/mul83rry/SoundManager/

نوشته شده توسط حسین اسدی.





برنامه نویس یونیتی و سوکت سرور
شاید از این پست‌ها خوشتان بیاید