Система озвучки для игр (с плагином для Unity)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Наша маленькая команда сделала игру AirHockeyVR под Oculus Quest, в ней есть обучение на английском языке, которое записал ютюбер, который сначала записал видео про игру -> мне понравился его голос -> я попросил его сделать озвучку -> он согласился и записал.

Дальше я начал смотреть, как Unity предполагает программировать локализацию звуков - и хоть решение есть, оно не удобное и не подразумевает заливку новых звуков по мере их поступления без ребилда игры. Поэтому я написал свое решение (аналогично тому решению, где вы можете хранить переводы в гугл таблицах, только тут не тексты, а звуки).

Вот что вам понадобится:

https://audio.sa-wd.ru/ - тут заливать звуки
https://audio.sa-wd.ru/storage/package/SAWDAudioManager.unitypackage - плагин для Unity

Общая идея очень простая: у вас уже есть игра, в ней уже есть звуки, а значит много переделывать вам не хочется.
И не надо.

Что бы звуки грузились в игру, вы просто подписываетесь на делегат в SAWDAudioManager когда вам нужно получить звуки (делегат возвращает наборы звуков по тэгу), и отписываетесь когда они вам больше не нужны.

public class SAWDAudioSourceHelper : MonoBehaviour
{
			public string sound_subTag = "";
	    void OnEnable()
        {
            SAWDAudioManager.SubscribeOnAudioLoad("Какой-то тэг с сайта(не сабтэг!)", ApplyNewAudios);
        }

        void OnDisable()
        {
            SAWDAudioManager.UnsubscribeAudioLoad("Какой-то тэг с сайта(не сабтэг!)", ApplyNewAudios);
        }
        
        private async void ApplyNewAudios(List<Audio> audios)
        {
            foreach (var audio in audios)
                {
                    if (audio.sub_tag.title == sound_subTag)
                    {
                        source.clip = await audio.GetClip();
                        
                        Debug.Log("Applied helper sub:"+audio.clip);
                        break;
                    }
                }
            source.Play();
        }
}


Для случаев, когда у вас один AudioSource с одним звуком - докидываете хелпер, в котором указываете тэг [и сабтэг, опционально] звука.

Смотрим в нижний правый угол! (SAWDAudioSourceHelper.cs)
Смотрим в нижний правый угол! (SAWDAudioSourceHelper.cs)


Предполагается так: только тег - это набор звуков, один созданный звук на сайте может быть перезалит набором звуков (для примера - это звук удара шайбы). Если есть сабтэг - значит это один звук, который заменяется один на один (для примера - это фраза "добро пожаловать!").

Так же потребуется капля работы с дизайном что бы можно было выбирать необходимые звуковые пакеты. Пример сцены есть в unitypackage. Можно не использовать, а просто вызвать загрузку других пакетов любым удобным вам способом.

public void Apply() {
				int[] audioPackageIDS = [1,6,9]; // ID пакетов с сайта
        string audio_package_ids = string.Join(",", audios);
        SAWDAudioManager.s_instance.UpdateAudioPackageIds(audio_package_ids);
    }

Да, оно хочет строку из ID пакетов через запятую.

Как только новые звуки будут загружены - делегаты пробросят ивент с новыми звуками во все подписанные места.

Само собой, вы можете подписываться на теги только там, где хотите иметь возможность менять звук на другой.

В AirHockeyVR я подписался на изменения звуков обучения, написал в нашем дискорде, и нашелся француз, который записал для нас французский перевод - так что идея вполне работает :)

Так же я попросил своего друга записать перевод на русский язык.

И вообще любой человек или группа людей может записать перевод для вашей игры - и сразу же добавить его в релизную версию (разработчик всё еще должен будет заапрувить этот аудиопакет, иначе он не появится в игре).

Проект в альфа-релизе, но уже пора пробовать - я морально готов к допилам на основе комментариев :)

Источник: https://habr.com/ru/post/672116/


Интересные статьи

Интересные статьи

Поднимите руку, если когда-нибудь сталкивались с такой ситуацией: вы получили текст со странными прямоугольниками или вопросительными знаками. Или эмодзи при отправке выглядело...
Есть статьи о недостатках Битрикса, которые написаны программистами. Недостатки, описанные в них рядовому пользователю безразличны, ведь он не собирается ничего программировать.
Несмотря на то, что “в коробке” с Битриксом уже идут модули как для SOAP (модуль “Веб сервисы” в редакции “Бизнес” и старше), так и для REST (модуль “Rest API” во всех редакциях, начиная с...
Каждый раз перед собесом я говорю себе: "Спокойно, не нужно ничего выдумывать, доучивать и врать, твоих знаний и опыта достаточно для того, что бы работать у них. Ты усилишь любую команду, тебе...
Довольно часто владельцы сайтов просят поставить на свои проекты индикаторы курсов валют и их динамику. Можно воспользоваться готовыми информерами, но они не всегда позволяют должным образом настроить...