0

我正在构建一个简单的 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();
    }
}
4

1 回答 1

2

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

audioSource.Stop()

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

  • 每次实例化新防御者时(例如在他们的 start 方法中),您将 +1 添加到计数器
  • 每次一个仆从被摧毁时,你加一个-1。

然后你检查:

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

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

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

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

于 2018-07-28T13:17:23.950 回答