C# 在开始新的音频剪辑之前取消音频剪辑?

C# 在开始新的音频剪辑之前取消音频剪辑?,c#,audio,unity3d,destroy,C#,Audio,Unity3d,Destroy,我几乎有一台工作的收音机,播放器可以走到它跟前,按下按钮,循环播放歌曲。一切正常,除了每次按下按钮,新歌都会播放,但原曲会继续在下面播放。对于播放的每首新歌,都会创建一个新对象,但它们都被称为“一次性音频”,所以我不知道如何销毁它们。如果我能修复这个bug,那么对于任何想使用它的人来说,这应该是一个有用的广播脚本。 更新,这是我修改过的无线电代码,现在可以使用了,下面是答案: void OnTriggerEnter2D(Collider2D target) { if (

我几乎有一台工作的收音机,播放器可以走到它跟前,按下按钮,循环播放歌曲。一切正常,除了每次按下按钮,新歌都会播放,但原曲会继续在下面播放。对于播放的每首新歌,都会创建一个新对象,但它们都被称为“一次性音频”,所以我不知道如何销毁它们。如果我能修复这个bug,那么对于任何想使用它的人来说,这应该是一个有用的广播脚本。 更新,这是我修改过的无线电代码,现在可以使用了,下面是答案:

 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不返回用于管理的音频源,因此不应将其用于此类声音。我建议将您的收音机设置为一个音频源和多个音频片段阵列。只需将您想要的剪辑拖动到检查器,并使用公共方法控制收音机。这样你就可以在不同的歌曲中重复使用它

以下代码未经测试

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();
    }
公共广播:单一行为
{
音频源输出;
公共音频剪辑[]首歌曲;
int指数=0;
void Start(){
输出=gameObject.AddComponent();
}
公共无效切换歌曲(){
songIndex++;
output.clip=歌曲[歌曲索引%songs.Length];
output.Play();
}
公共无效开关(){
切换歌曲();
}
公共空间关闭(){
output.Stop();
}

我希望能够使用这些函数-我得到了“output=AddComponent()行,其中“AddComponent”显示为红色。此外,此脚本应位于玩家角色上,对吗?再次感谢,此代码旨在用于世界上任何无线电游戏对象。但它只是用来向您展示功能。并且未经测试。这是因为Unity从Monobhavii中删除了AddComponent我们的和您现在需要显式地使用gameObject.AddComponent。@fafase很好的捕获。更改了它。这就是您编写代码而不测试代码时所发生的情况。您可能会发现更多。通过该更新(我现在应该已经知道了,谢谢),我使您的代码正常工作,并且它可以完美地运行收音机!谢谢!!