在开始新的音频剪辑之前取消音频剪辑
本文关键字:音频 取消 开始 | 更新日期: 2023-09-27 18:28:41
我几乎有一个可以工作的收音机,玩家可以走到那里,按下按钮,循环播放歌曲。除了按下每一个按钮,都会播放新歌,但原歌会在下面继续播放。对于播放的每首新歌,都会创建一个新对象,但它们都被称为"One Shot Audio",所以我不知道如何销毁它们。如果我能修复这个错误,那么对于任何想使用它的人来说,这应该是一个有用的无线电脚本。更新,这是我修改后的无线电代码,现在正在工作,有了以下答案的帮助:
void OnTriggerEnter2D(Collider2D target) {
if (target.gameObject.tag == "radio") {
radioEnter = true;
}
}
void OnTriggerExit2D(Collider2D target) {
if (target.gameObject.tag == "radio") {
radioEnter = false;
}
}
public void radioUse(){
if ((Input.GetKeyDown (KeyCode.M)) && song3on == true && radioEnter == true) {
TurnOn ();
song1on = true;
song2on = false;
song3on = false;
}
else if ((Input.GetKeyDown (KeyCode.M)) && song1on == true && radioEnter == true) {
TurnOff ();
song1on = false;
song2on = true;
song3on = false;
TurnOn();
}
else if ((Input.GetKeyDown (KeyCode.M)) && song2on == true && radioEnter == true) {
TurnOff ();
song1on = false;
song2on = false;
song3on = true;
TurnOn ();
}
}
public void Update() {
raidoUse();
}
由于PlayClipAtPoint不返回AudioSource进行管理,因此不应将其用于此类声音。我建议在一个阵列中设置一个AudioSource和多个AudioClip的收音机。只需将您想要的剪辑拖动到检查器,然后使用公共方法来控制收音机。这样你就可以在不同的歌曲中重复使用它。
以下代码未经过测试。
Public class Radio : MonoBehaviour
{
AudioSource output;
public AudioClip[] songs;
int songIndex = 0;
void Start(){
output = gameObject.AddComponent<AudioSource>();
}
public void ToggleSong(){
songIndex++;
output.clip = songs[songIndex % songs.Length];
output.Play();
}
public void TurnOn(){
ToggleSong();
}
public void TurnOff(){
output.Stop();
}