صداگذاری بازی کامپیوتری در یونیتی – بخش دوم

در بخش گذشته؛ با نحوه صداگذاری و ورود به Trigger و همچنین اضافه کردن موسیقی متن به بازی، آشنا شدیم. در این بخش میخوایم کمی پا رو فراتر بذاریم و Dynamic Soundscape رو هم یاد بگیریم. فقط قبل از اون باید کمی مفاهیم آهنگسازی/صداگذاری رو با هم مرور کنیم.

مفهوم Soundscape

فضاهایی که توسط صدا ساخته میشن، یا بهتر بگم؛ صدایی که باعث میشه فضایی خاص به ذهن ما بیاد رو بهش میگن Soundscape. مفهوم پیچیده‌ای نیست ولی میتونه به پیچیده شدن سایر مفاهیم یا حتی هموار تر شدن فهمشون، کمک کنه.

در تصویر بالا، چند Soundscape رو مشاهده میکنیم. یکی برای موج، یکی برای باد، یکی برای پرندگان و … . اما آیا همیشه Soundscape ها، صداهای محیطی (Ambient ) هستند؟ خیر. بعضی وقتا هم قطعات کوتاه و کوچک موسیقی هستند که به ما در درک شرایط کمک میکنن (برای اهل فنش : مثلا یه ویولن ترمولو که یه آرپژ مینور رو بزنه، میتونه کمی ترس یا نگرانی رو القاء کنه). پس، ما نیاز به Soundscaping داریم که بتونیم با صداها؛ حس القاء کنیم.

مفهوم Dynamic Soundscape

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

مفاهیم مورد نیاز در یونیتی

مفهوم Audio Mixer

میکسر، مفهومش تقریبا همه جا یکیه، پس اگر با Reaper, FL Studio, Studio One و نرم افزارهای آهنگسازی دیگر (هزاران نرم افزار دیگه!) کار کردید، با این مفهوم آشنایید پس این بخش رو می‌تونید ازش عبور کنید . اما به طور کل، ما از میکسر استفاده میکنیم جهت این که صداها رو به کانالهای مختلف بفرستیم. در این کانال ها میتونیم بلندی صدا، تغییراتشون و همچنین افکتهایی که نیاز داریم رو کنترل کنیم.

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

شروع پروژه

خب، اول از فولدر Assets با راست کلیک، یک Audio Mixer ایجاد کنیم و اسمش رو بذاریم Master (قراره همه میکسرهای دیگرمون زیرمجموعه این باشن) :

بعد از منوی Window گزینه Audio Mixer رو فعال میکنیم و به این شکل اون رو خواهیم دید :

حالا که یک Master داریم، دو گروه دیگه (از زیرمجموعه Groups )  ایجاد میکنیم به اسم Soundtrack و Sphere . از Soundtrack برای کنترل موسیقی متن (چطوری؟! یاد میگیریم) استفاده میکنیم و از Sphere برای کنترل موسیقی که کنار Sphere ما پخش میشه.

حالا میریم سراغ دوربینمون و Audio Source ای که بهش اضافه کردیم ، یک گزینه Output داریم، اون رو روی Soundtrack قرار میدیم (به همین راحتی، موسیقی/صدا رو در یک کانال از میکسر فرستادیم!)

و به همین ترتیب، موسیقی که روی Sphere قرار دادیم رو هم به کانال Sphere میفرستیم.

استفاده از Snapshot ها

میکسرها قابلیتی دارن به اسم Snapshot که میتونیم وضعیتی رو از اون میکسرها، ثابت نگه داریم. در واقع انگار که عکس گرفته باشیم (از اسم مشخصه). و به کمک همین Snapshot هاست که میشه وضعیت صدا رو کنترل کرد. در ادامه، کد و روش کار رو با هم یاد میگیریم.

نوشتن اسکریپت Dynamic Soundscape

قبل از هرچیزی، اسکریپتی که در بخش قبل نوشتیم رو از Sphere حذف میکنیم و فایل صوتی رو مستقیم به Audio Source میدیم. سپس به Audio Mixer بر میگردیم و این طور تغییرش میدیم :

با اجرای بازی، الان فقط میتونیم صدای موسیقی متن رو بشنویم. پس میریم به قسمت Snapshots و روی + کلیک می‌کنیم و اسمش رو میذاریم Snap1 . سپس، اون Snapshot ستاره دار (به نوعی Master در اسنپ شاتها!) رو به این شکل تغییر میدیم :

و باز یک Snapshot جدید به اسم Snap2 ایجاد میکنیم. حالا در Asset ها یک C# Script تازه ایجاد میکنیم به اسم DynamicSoundscape . و این ها رو درونش مینویسیم :

در خط چهارم من UnityEngine.Audio رو اضافه کردم، این به این معناست که میتونم از Snapshot ها هم استفاده کنم. در خط ۷ و ۸ هم دو تا Snapshot ساختم به اسم fadeIn (برای آرام بلند شدن صدای مورد نظر) و fadeOut (برای آرام کم شدن صدا)، سپس تعریف کردم که وقتی وارد Trigger شدیم و تگمون هم Player بود، وارد fadeIn بشه و وقتی ازش خارج شدیم، وارد fadeOut . حالا این اسکریپت و دو اسنپ شاتی که ساختیم رو به Sphere میدیم :

حالا وقتشه که بازیمون رو اجرا کنیم و نتیجه رو به چشم ببینیم 🙂

نتیجه کارمون به صورت GIF به این شکله (به تغییر کانالهای میکسر دقت کنید 😀 )

مسلما این همه اون چیزی نیست که برای صداگذاری باید بدونید، ولی به نظر من مهم ترین بخشه. امیدوارم در این دو بخش، تونسته باشم به خوبی پوشش بدم مطلب رو. در آینده هم احتمالا باز مطالبی در مورد کار با یونیتی خواهم نوشت، و اینها آخرین مطالب من در یونیتی نیستن. بهرحال، امید به این که مفید بوده باشه و امید به موفقیت شما 🙂

Share

پاسخ دهید

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