ساخت AudioMaster.cs بهینه برای بازی

بدون ديدگاه

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

چرا استفاده از audioMaster.cs مهم است

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

نحوه کار

نحوه کار این اسکریپت را میتوان اینگونه شرح داد که ما بسته به نیازمون هر تعداد audiosource که نیاز داریم رو در فیلد audiospurce_ می نویسیم و در اولین اجرا کد انها را ایجاد کرده و به ارایه audio معرفی میکند , حالا کلیپ های صدا رو به ارایه clips اضافه میکنیم و هر جا که نیاز به پخش صداها یا افکت ها داشتیم متد پخش صدا رو فراخوانی میکنیم و متد با یک حلقه تعداد ایدیوسورس ها رو چک میکنه تا ببینه ایا صدایی در حال پخشه یا نه اگر نبود همون ایدیو رو انتخاب میکنه و حلقه رو میبنده.

شروع بکار

یک ابجکت خالی ایجاد کنید و کد زیر رو بهش اضافه کنید

using UnityEngine;
public class AudioMaster : MonoBehaviour
{
    [SerializeField] int AudioSorces_ = 10; // num of audiosorce want to create
    [SerializeField] AudioClip[] clips; // audio clips
     new AudioSource[] audio;
    public static AudioMaster ic;
    private void Start()
    {
        ic = this;
        audio = new AudioSource[AudioSorces_];
        for (int i = 0; i < AudioSorces_; i++)
        {
            GameObject clone = new GameObject("AudioSorce (" + i + ")");
            clone.AddComponent<AudioSource>();
            audio[i] = clone.GetComponent<AudioSource>();
            clone.transform.SetParent(this.transform);
        }
    }
    public static void Play(int n)
    {
        foreach (AudioSource s in ic.audio)
        {
            if (s.isPlaying == false)
            {
                s.clip = ic.clips[n];
                s.mute = false;
                s.Play();
                break;
            }
        }
    }
}

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

 AudioMaster.Play(1);
  • نکته بجای عدد 1 شماره کلیپی که توی ارایه صداها اضافه کردید رو وارد کنید
  • این کد فقط جنبه اشنایی با این روش رو داشت و برای اینکه واقعا بهینه باشه باید کلیپ های صدا رو داخل یک scriptableobject قرار بدید , برای اینکه از موضوع بحث خارج نشیم به اون اشاره نکردم چون احتمال دادم موجب سردرگمی شما بشه , در صورت داشتن هرگونه سوال همینجا مطرح نمایید.با تشکر

نوشتن دیدگاه