首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一:共享一个AudioSource的多个实例

统一:共享一个AudioSource的多个实例
EN

Stack Overflow用户
提问于 2018-07-28 10:12:38
回答 1查看 640关注 0票数 0

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

我可以添加不同的后卫到我的游戏,我希望我的一个后卫发挥一个持续的声音时,它是实例化在游戏中。

所以声音应该从一开始就醒着,循环起来,直到防守者被杀死。问题是,如果我在游戏中实例化一个以上的防守者,他们都会演奏相同的声音,这会堆叠起来。

我觉得我什么都试过了,这归结于这个问题。如果我把AudioSource放在防守者身上,声音就会堆积起来。如果我把AudioSource放在不同的GameObject中,那么当防御者被摧毁时,声音不会停止。

我遗漏了什么?我试图为defender类创建一个静态AudioSource,但这也不起作用。我试着将它与维护者的健康状况联系起来,一旦维护者的健康值为0(= health ),切换一个布尔值,但我的解决方案都没有起作用。

这是我最后一次尝试防守者。

代码语言:javascript
复制
private static AudioSource audioSource;

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-28 13:17:23

正如@程序员所说的,您需要像这样停止音频源:

代码语言:javascript
复制
audioSource.Stop()

现在是什么时候。据我所知,你希望有一个独特的音频源播放,只要其中一个防守者还活着。所以你能做的就是在你提到的非防御者GameObject中创建一个计数器。还有一种从维护者脚本中修改此计数器的公共方法,其方式如下:

  • 每当一个新的防御程序被实例化(例如,在他们的start方法中),您就会向计数器添加一个+1
  • 每当一个仆从被摧毁时,你都要加一个-1。

然后你检查:

  • 如果计数器>1,则添加: if (!audioSource.isPlaying){ audioSource.Play();}
  • 如果计数器是== 0,则停止它。

如果您有几种类型的仆从,有不同的声音,您可以有不同的计数器和不同的方法被调用从仆从脚本开始和播放不同的声音。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51570297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档