Unity:共享一个AudioSource的多个实例

时间:2018-07-28 10:12:39

标签: unity3d audio-source

出于学习目的,我正在构建一个简单的2D游戏,基本上是《植物大战僵尸》的副本。

我可以在游戏中添加其他防御者,并且我希望其中一名防御者在游戏中实例化声音时不断播放声音。

因此,声音应在启动和循环时唤醒,直到防御者被杀死为止。 问题是,如果我在游戏中实例化了一个以上的防御者,他们将播放相同的声音,并不断叠加。

我觉得我已经尝试了一切,这归结为这个问题。 如果我将AudioSource放在防御者本身上,声音就会堆积起来。 如果我将AudioSource放在其他GameObject中,则在防御者被摧毁时声音不会停止。

我想念什么?我试图为防御者类创建一个静态AudioSource,但这也不起作用。我试图将其与防御者的健康联系起来,一旦防御者的健康为0(=死),就切换一个布尔值,但是我的解决方案都没有起作用。

这是我对Defender的最后一次脚本尝试。

private static AudioSource audioSource;

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

1 个答案:

答案 0 :(得分:2)

正如@Programmer所说,您需要像这样停止音频源:

audioSource.Stop()

现在何时。据我了解,只要其中一位防御者还活着,您就想拥有一个独特的音频源。因此,您可以做的是在您提到的非防御者GameObject中创建一个计数器。也是一种通过以下方式从防御者的脚本修改此计数器的公共方法:

  • 每当实例化一个新的防御者时(在他们的启动方法中, 例如),您将+1添加到计数器
  • 每次摧毁一个小兵时,您都会添加-1。

然后您检查:

  • 如果计数器> 1,则添加:

    如果(!audioSource.isPlaying){         audioSource.Play();     }

  • 如果计数器== 0,则将其停止。

如果您有几种类型的小仆,并且声音不同,则可以从小仆脚本中调用不同的计数器和不同的方法来启动和播放不同的声音。

相关问题