Подскажите плз, как настроить постоянный звук лопастей вертолёта? Что бы когда он летел или стоял на месте, то этот звук постоянно проигрывался.
Я пробовал через ауру, сделал вот так (как на скрине). Но звука никакого нету
Итак, я это делал, звуки еще та проблема в варике, с ними нужно научиться правильно работать (а кто нам это объяснит? Никто. Сам).
Короче вот ответ для тебя
Итак импортируем звук .wav и создаем в редакторе звука переменную, указав наш файл "использовать как звук". Формат должен быть как на скрине:
Далее в триггерах создаем из этого звука локальную переменную sound, ее прикрепляем к нужному юниту и воспроизводим. Усе.
Вот пример, где я сделал, чтобы звук давался каждому вертолету, который появится на карте:
А вот код:
local sound s=CreateSoundFromLabel("EngineLoop.wav",true,true,false,500,1000)
call AttachSoundToUnitBJ( s, GetTriggerUnit() )
call StartSound(s)
(Если что-то не понятно из кода, пиши, объясню)
Кстати, вот карта-пример для теста где это реализовано.
Правда в таком подходе есть проблема, что звук повторяется. То есть даже после смерти юнита он останется. Для этого можно создать систему, где ты сохраняешь юнита и его звук отдельно в переменных, и когда юнит умирает - удаляешь его звук.
Вот немного доделал систему, так звук будет удалятся после уничтожения юнита.
Ответ
Начало создания системы описано тут
i - просто целочисленная переменная для цикла с перебором.
Sounds - массив звуков, где и храним до уничтожения.
Смысл в том, что при создании звука, сначала находим свободное место в массиве, сохраняем туда звук а номер этого места сохраняем в кастомное значение юнита (если не желаете его использовать, кастомное значение, тогда придется параллельно массив создать с юнитами, где и сохраним этого юнита, при этом номер в обоих массивах должен быть одинаковым).
Далее останавливаем цикл и при смерти юнита уничтожаем звук и обнуляем переменную (освобождаем место для следующего звука).
Если не удалять, то по этой системе их будет накапливаться бесконечное кол-во, что будет забивать память. А если использовать звук снова на новом юните, то надо как-то идентифицировать, что звук свободен, а если звуков не хватает, то создать еще. Это все то-же усложнит систему. Учитывая что заранее я не знаю, сколько звуков может пригодится для карты. Тут-же все динамически будет создаваться и удаляться в зависимости от кол-ва юнитов.
повторюсь, лучше заранее сделать массив звуков и их использовать, не удалять, просто останавливать
В плане оптимизации для варика согласен)
rsfghd тогда думаю этот вариант будет более оптимизированным:
Итоговое решение
Продолжение прошлых наработок
Добавляем массив юнитов, где будут храниться вертолеты. По нему и определяем, что звук свободен. А в массив со звуками добавляем новые только тогда, когда их становится не хватать.
В итоге при смерти юнита, удаляем его из массива юнитов, а в массиве звуков просто останавливаем звук с тем-же индексом. При создании вертолета, он добавляется в массив юнитов где есть место, а звук прикрепляется к новому юниту и запускается (и только при надобности создается).
Отредактирован konvan5
Вот пример, где я сделал, чтобы звук давался каждому вертолету, который появится на карте:
Отредактирован konvan5
i - просто целочисленная переменная для цикла с перебором.
Sounds - массив звуков, где и храним до уничтожения.
Смысл в том, что при создании звука, сначала находим свободное место в массиве, сохраняем туда звук а номер этого места сохраняем в кастомное значение юнита (если не желаете его использовать, кастомное значение, тогда придется параллельно массив создать с юнитами, где и сохраним этого юнита, при этом номер в обоих массивах должен быть одинаковым).
Далее останавливаем цикл и при смерти юнита уничтожаем звук и обнуляем переменную (освобождаем место для следующего звука).
https://xgm.guru/p/wc3/Ytechka-function-PlaySound-takes-string-s...
Добавляем массив юнитов, где будут храниться вертолеты. По нему и определяем, что звук свободен. А в массив со звуками добавляем новые только тогда, когда их становится не хватать.
В итоге при смерти юнита, удаляем его из массива юнитов, а в массиве звуков просто останавливаем звук с тем-же индексом. При создании вертолета, он добавляется в массив юнитов где есть место, а звук прикрепляется к новому юниту и запускается (и только при надобности создается).