2016-01-02 230 views
2

我幾乎有一個工作收音機,玩家可以走到它,按下按鈕並循環播放歌曲。除了每按一個按鈕,新歌曲都會播放,但原作將繼續播放。每播放一首新歌曲,都會創建一個新對象,但它們都被稱爲「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(); 
    } 

回答

1

由於PlayClipAtPoint不返回的AudioSource來管理你不應該使用這些類型的聲音。我建議用一個AudioSource和一個數組中的多個AudioClips來設置你的收音機。只需將想要的剪輯拖放到檢查器上,然後使用公共方法來控制收音機。這樣你可以重複使用不同的歌曲。

以下代碼未經測試。

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(); 
    } 
+0

我希望能夠使用這些函數 - 我得到了儘可能'輸出= AddComponent ();'在Start函數中,其中'AddComponent'顯示爲紅色。另外,這個腳本是爲了讓玩家角色正確嗎?非常感謝 –

+0

該代碼旨在用於世界上任何無線電遊戲對象。但它只是爲了向您展示功能。它沒有經過測試。 – Mattias

+0

這是因爲Unity從MonoBehaviour中刪除了AddComponent,現在需要顯式使用gameObject.AddComponent。 – Everts