我正在制作一个简单的2D游戏,基本上是《植物大战僵尸》的克隆,用于学习目的。
我可以在我的比赛中添加不同的防守球员,我希望我的一名防守球员在比赛中实例化时能发出持续的声音。
因此,声音应该在开始时是清醒的,循环直到防守队员被杀。问题是,如果我在游戏中实例化这些防守球员中的一个以上,他们都会发出相同的声音,这会叠加起来。
我觉得我什么都试过了,归根结底就是这个问题。如果我把AudioSource放在防御者身上,声音就会堆积起来。如果我把AudioSource放在不同的游戏对象中,那么当防御者被摧毁时,声音不会停止。
我错过了什么?我试图为后卫类创建一个静态AudioSource,但这也不起作用。我试图将其与防守球员的健康状况联系起来,一旦防守球员的生命值为0(=死亡(,就切换布尔值,但我的解决方案都不起作用。
这是我在Defender上的最后一次脚本尝试。
private static AudioSource audioSource;
// Use this for initialization
void Start () {
audioSource = gameObject.GetComponent<AudioSource>();
if (!audioSource.isPlaying){
audioSource.Play();
}
}
正如@Programmer所说,你需要像这样停止音频源:
audioSource.Stop()
现在什么时候。据我所知,只要其中一名防守队员还活着,你就希望有一个独特的音频源播放。所以你能做的就是在你提到的非防御者GameObject中创建一个计数器。还有一种公共方法,可以通过以下方式从防御者的脚本中修改此计数器:
- 每次实例化一个新的防御者(在他们的开始方法中例如(,则向计数器添加+1
- 每摧毁一个仆从,你就加一个-1
然后检查:
如果计数器>1,则添加:
if(!audioSource.isPlaying({audioSource.Play((;}
如果计数器为==0,则停止它。
如果你有几种类型的小黄人,有不同的声音,你可以从小黄人脚本中调用不同的计数器和不同的方法来启动和播放不同的声音。