Фейдер для всех звуков в игре.

Программирование на Юнити.

Фейдер для всех звуков в игре.

Сообщение dtntr 03 апр 2012, 13:34

Как регулировать громкость, для некоторого множества звуковых эффектов?
Михайлов Дмитрий
skype: Dtntrr
icq: 168121770
e-mail: _ultradma@mail.ru
_ttp://vkontakte.ru/#/id28379000
Мой законченный проект: _ttp://www.kongregate.com/games/Dmitrii ... oll-bomber
dtntr
UNITрон
 
Сообщения: 201
Зарегистрирован: 06 окт 2009, 12:16
Откуда: Тверь
  • ICQ

Re: Фейдер для всех звуков в игре.

Сообщение pod4444 03 апр 2012, 13:42

Если под звуковым эффектом понимается компонент Audio Source на разных объектах, то можно сделать AudioSource[] и забить его ссылками на нужные компоненты,а с помощью foreach убавлять и прибавлять громкость. Если нужно могу привести пример.
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт

Re: Фейдер для всех звуков в игре.

Сообщение dtntr 03 апр 2012, 14:21

От уровня к уровню, количество ГО с компонентом AudioSource меняется. Как находить в уровне, все объекты с компонентом AudioSource? Если будет пример, конечно это будет здорово. Вероятнее всего на некоторых ГО будет по нескольку AudioSource.
Михайлов Дмитрий
skype: Dtntrr
icq: 168121770
e-mail: _ultradma@mail.ru
_ttp://vkontakte.ru/#/id28379000
Мой законченный проект: _ttp://www.kongregate.com/games/Dmitrii ... oll-bomber
dtntr
UNITрон
 
Сообщения: 201
Зарегистрирован: 06 окт 2009, 12:16
Откуда: Тверь
  • ICQ

Re: Фейдер для всех звуков в игре.

Сообщение pod4444 03 апр 2012, 15:24

Тут зависит от реализации, но расскажу в общем:

У нас есть методы:
1) FindObjectsOfType(Type), находит все объекты на сцене с такими Типом, забивать нужно это в Massive[Type]
2) GameObject.FindGameObjectsWithTag(tag) и GameObject.GetComponents(Type)

Что мы в итоге имеем, первый метод найдет вообще все Audio Source на сцене, второй делаем так:
если на сцене висят просто ГО заточенные под звук, то даем им нужный tag, например SoundFX, далее так:

Синтаксис:
Используется csharp
using System.Collections.Generic;
using UnityEngine;

class GetSoundFX : MonoBehaviour
{
    public string tag; // Тэг
    GameObject[] soundGO;// Массив всех ГО с таким тэгом
    AudioSource[] aSources; // Все СаундСорсы со всех ГО из soundGO
    int valueComponents; // Переменная используется два раза: в первый для подсчета всех элементов, во второй раз для учета сколько уже прогнали элементов

    void Awake()
    {
        valueComponents = 0;
        soundGO = GameObject.FindGameObjectsWithTag(tag); //Набиваем массив

        //Считаем сколько у нас всего компонентов, чтобы иницилизировать массив
        foreach (GameObject GO in soundGO)
        {
            AudioSource[] tempComponents = GO.GetComponents<AudioSource>();
            valueComponents += tempComponents.Length;
        }

        aSources = new AudioSource[valueComponents]; //Иницилизируем массив
        valueComponents = 0; // Обнуляем

        //Закидываем все ссылки в массив aSources
        foreach (GameObject GO in soundGO)
        {
            AudioSource[] tempComponents = GO.GetComponents<AudioSource>();
            for (int i = 0; i < tempComponents.Length; i++)
            {
                aSources[valueComponents] = tempComponents[i];
                valueComponents++;
            }
        }
        Debug.Log("soundGO: " + soundGO.Length + " aSources: " + aSources.Length);
    }
}
 


Тонкость здесь такая, ГО с тегом определяет какая у нас группа звуков, т.е все звуковые компоненты на данном ГО с данным тегом будут считаться отнесенной к этой группе.
Если надо чтобы на одном ГО висели разные СаундСорсы то придется писать костыли, в виде отдельного класса, в который через инспектор нужно будет закидывать нужные компоненты.
Но проще просто делать ГО по группам, то есть на ГО с одним тэгом висят звуковые эффекты, на другом ГО с другим тегом висят звуки окружения и так далее. Можно несколько ГО с одним тегом, с них со всех соберутся СаундСорсы.
Скрипт рабочий, прогонял у себя на машине.
Аватара пользователя
pod4444
Старожил
 
Сообщения: 721
Зарегистрирован: 20 янв 2012, 22:02
Откуда: Воронеж
Skype: pod4444
  • Сайт


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 9