Unity: несколько экземпляров, использующих один AudioSource

Я строю простую 2D-игру, в основном клон Plants vs. Zombies, для учебных целей.

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

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

Я чувствую, что перепробовал все, и это сводится к этой проблеме. Если я поставлю AudioSource на самого защитника, звуки будут складываться. Если я помещу AudioSource в другой GameObject, то звук не остановится, когда защитник будет уничтожен.

Что мне не хватает? Я пытался создать статический AudioSource для класса защитника, но это тоже не сработало. Я попытался связать это со здоровьем защитника, переключив логическое значение, как только у защитника будет здоровье 0 (= мертв), но ни одно из моих решений не сработало.

Это моя последняя попытка сценария на Защитнике.

private static AudioSource audioSource;

// Use this for initialization
void Start () {
    audioSource = gameObject.GetComponent<AudioSource>();
    if (!audioSource.isPlaying){
        audioSource.Play();
    }
}

1 ответ

Решение

Как сказал @Programmer, вам нужно остановить Audio Source следующим образом:

audioSource.Stop()

Сейчас когда. Насколько я понимаю, вы хотите, чтобы уникальный источник звука воспроизводился, пока один из защитников еще жив. Итак, что вы можете сделать, это создать счетчик в том необоронном GameObject, о котором вы упоминали. Также публичный метод для изменения этого счетчика из сценариев защитников следующим образом:

  • Каждый раз, когда создается новый защитник (например, в методе запуска), вы добавляете +1 к счетчику.
  • Каждый раз, когда миньон уничтожается, вы добавляете -1.

Затем вы проверяете:

  • Если счетчик> 1, то вы добавляете:

    if (! audioSource.isPlaying) {audioSource.Play (); }

  • Если счетчик == 0, вы останавливаете его.

Если у вас есть несколько типов миньонов с разными звуками, вы можете использовать разные счетчики и разные методы для вызова из скрипта миньонов, чтобы запускать и воспроизводить разные звуки.

Другие вопросы по тегам