Unity:多个实例共享一个音频源

Unity: Multiple Instances sharing one AudioSource

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

我可以在我的游戏中添加不同的防守者,我希望我的一名防守者在游戏中实例化时播放持续的声音。

所以声音应该在开始时唤醒并循环播放直到防御者被杀死。 问题是,如果我在游戏中实例化多个防御者,它们都会播放相同的声音,叠加起来。

我觉得我已经尝试了所有方法,但归结为这个问题。 如果我将 AudioSource 放在防御者身上,声音就会叠加。 如果我将 AudioSource 放在不同的 GameObject 中,那么当防御者被摧毁时声音不会停止。

我错过了什么?我试图为防御者 class 创建一个静态 AudioSource 但这也没有用。我试图将此与防御者的健康状况联系起来,一旦防御者的健康状况为 0(=死亡)就切换一个布尔值,但 none 我的解决方案确实有效。

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

private static AudioSource audioSource;

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

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

audioSource.Stop()

现在什么时候。据我了解,只要其中一名防守者还活着,您就希望播放一个独特的音频源。所以你可以做的是在你提到的那个非防御者游戏对象中创建一个计数器。还有一种 public 方法可以通过以下方式从防御者的脚本中修改此计数器:

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

然后你检查:

  • 如果计数器 > 1 那么你添加:

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

  • 如果计数器为 == 0,则停止它。

如果您有多种类型的 minions,具有不同的声音,您可以从 minions 脚本中调用不同的计数器和不同的方法来启动和播放不同的声音。