【问题标题】:Unity: Multiple Instances sharing one AudioSourceUnity:多个实例共享一个 AudioSource
【发布时间】:2018-07-29 03:17:13
【问题描述】:

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

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

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

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

我错过了什么?我试图为防御者类创建一个静态音频源,但这也不起作用。我试图将其与防御者的健康状况联系起来,一旦防御者的健康状况为 0(=死亡),就切换一个布尔值,但我的解决方案都没有奏效。

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

private static AudioSource audioSource;

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

【问题讨论】:

  • “即使防御者已经被摧毁,声音也不会停止。”声音不会自行停止。你必须用audioSource.Stop() 阻止它。
  • 但是什么时候?什么时候停止声音?在我写的时候,我试着把它和防守者的生命值联系起来,一旦生命值降到零就停止声音,但这也没有用。
  • 您可以随时停止声音。我不知道你什么时候要停止停止,所以我忍不住,但我的第一条评论显示了如何停止声音
  • 该问题与您面临的实际问题无关。因此对未来的读者没有用处。我建议您编辑或删除问题。
  • @marvinb89 让我知道我的解决方案是否明确。或者,如果您正在寻找其他东西

标签: unity3d audio-source


【解决方案1】:

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

audioSource.Stop()

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

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

然后你检查:

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

    如果(!audioSource.isPlaying){ 音频源.播放(); }

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

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

【讨论】:

  • 我喜欢你对这个问题的理解,它表达得不是很好
  • 这确实有帮助。尽管我觉得我以前尝试过但没有用,但您的回答帮助我再次尝试,更清楚地了解我实际上在尝试什么。我使用健康类来检查游戏对象是否属于特定的防御者类型。然后我在这个防御者的类中调用一个方法来检查指定的计数器是否为 0 或更大。当然,如果它是 0,声音就会停止。再次感谢您能够理解我的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多