2016-01-02 1 views
2

У меня почти есть рабочее радио, где игрок может подойти к нему, нажать кнопку и прокрутить песни. Все работает, за исключением того, что с каждой кнопкой нажмите, чтобы воспроизвести новую песню, но оригинал будет продолжать играть под ней. Для каждой новой песни, которая воспроизводится, создается новый объект, но все они называются «One Shot Audio», поэтому я не знаю, как их уничтожить. Если я могу исправить эту ошибку, тогда это должен быть полезный сценарий для всех, кто хочет его использовать. Update, вот мой модифицированный код радио, сейчас работает, с помощью приведенного ниже ответа:Отмена аудио клипа перед тем, как начать новый?

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

Я хотел бы быть в состоянии использовать эти functions- я получил насколько «выход = AddComponent ();» line в функции Start, где «AddComponent» отображается красным цветом. Кроме того, этот скрипт предназначен для правильного отображения персонажа игрока? Еще раз спасибо –

+0

Код предназначался для использования на любом радиоий-объекте в мире. Но это просто для того, чтобы показать вам функциональность. И это не проверено. – Mattias

+0

Это потому, что Unity удалил AddComponent из MonoBehaviour, и теперь вам нужно явно использовать gameObject.AddComponent. – Everts

Смежные вопросы