2

Ich habe ein 2D-Spiel für Android in Unity gemacht und es gibt ein Problem. Es gibt Sounds im Spiel (z. B. Menü Button Sound), die perfekt funktionieren.Soundproblem in einem Android-Spiel in Unity gemacht

Wenn ich das Spiel verlasse (z. B. mit der Home-Taste) und zurückkomme, funktionieren die Sounds ebenfalls gut.

Aber wenn ich eine akustische Benachrichtigung (E-Mail, skpye usw.) bekomme, wird das Spiel stumm, bis ich das Spiel beenden und neu starten.

Ich habe versucht, nach der Lösung zu suchen, und ich fand OnApplicationPause-Methode, aber es hilft mir nicht. Ich weiß nicht warum ...

Hat jemand eine Idee, was könnte das Problem oder die Lösung sein :)?

Danke.

EDIT

angeschlossen ich mein Telefon an den Computer an und versucht, zu debuggen und folgen der OnApplicationPause Methode.

Der Sound wird abgespielt, wenn das Spiel beginnt.

Wenn ich die Home-Taste drücke, wird die audioSource.Pause(); wird aufgerufen und wenn ich zurück zum Spiel bin, wird die audioSource.UnPause(); wird auch genannt. Und da ist Sound.

Wenn ich einen Anruf bekomme, die audioSource.Pause(); wird aufgerufen und wenn ich zurück zum Spiel bin, wird die audioSource.UnPause(); wird auch genannt. Aber es gibt keinen Ton.

Wenn ich eine Benachrichtigung (z. B. E-Mail) bekomme, gibt es keine audioSource.Pause() -Anweisung und der Ton ist weg.

Die Anweisungen 'if (audioSource == null)' und 'if (! AudioSource.isPlaying)' werden nie aufgerufen.

private AudioSource audioSource; 
public AudioClip clip; 

void Awake() { 
    if (audioSource == null) { 
     audioSource = gameObject.AddComponent<AudioSource>(); 
     audioSource.loop = true; 
     audioSource.clip = clip; 
    } 

    if (!audioSource.isPlaying) { 
     audioSource.Play(); 
    } 
} 

void OnApplicationPause(bool pauseStatus) { 
    //Check if this is Pause 
    if (pauseStatus) 
    { 
     //Pause Audio if it is playing 
     if (audioSource.isPlaying) 
     { 
      audioSource.Pause(); 

      //Set to true so that we will detamine whether to Play() or UnPause() the music next time 
      audioSourcePaused = true; 
      Debug.Log("ifplaying->pause"); 
     } 
     Debug.Log("pause"); 
    } 

    //Check if this is Resume 
    if (!pauseStatus) { 
     //Make sure audio is not null. If null, getComponent again 
     if (audioSource == null) { 
      audioSource = gameObject.AddComponent<AudioSource>(); 
      audioSource.loop = true; 
      audioSource.clip = clip; 
      Debug.Log("Null"); 
     } 

     //Check if we paused the audio then resume 
     if (audioSourcePaused) { 
      audioSource.UnPause(); 

      //Set to false so that we will detamine whether to Play() or UnPause() the music next time 
      audioSourcePaused = false; 
      Debug.Log("Unpause"); 
     } 

     //Check if Audio is playing. Don't play if already playing. 
     if (!audioSource.isPlaying) { 
      audioSource.Play(); 
      Debug.Log("play"); 
     } 
    } 
} 
+0

'OnApplicationPause' ist der richtige Weg zur Lösung dieses Problems. Veröffentlichen Sie die Lösung für Ihren OnApplicationPause-Code. Vielleicht stimmt etwas in deinem Code nicht. – Programmer

+0

Ich habe meinen Code zum Beitrag hinzugefügt. Vielen Dank. – dtamas80

+0

Meine Antwort hinzugefügt. Schau mal. Wenn möglich, vermeide 'PlayOneShot' und benutze' Play'. Mein Codebeispiel sollte Ihr Problem lösen. – Programmer

Antwort

0

Mit Ihrem aktualisierten Code machen Sie es falsch. Die Variable gibt true zurück, wenn die App pausiert und false ist, wenn die App wieder aufgenommen ist. Also, manuell Pause die Musik, wenn ist true und dann wieder die Musik, wenn pauseStatusfalse ist. Wenn Sie den Ton nicht pausieren, wird er wahrscheinlich nicht mehr wiedergegeben, nachdem das System fortgesetzt wurde.

Sie müssen auch überprüfen, ob die Audioquelle null vor der Wiedergabe oder Wiederaufnahme der Audio nach pauseStatus ist false .. Unten finden Sie eine komplette Probe, die Ihnen den Einstieg erhalten.

public AudioClip clip; 
private AudioSource _musicAudioSource; 
bool _musicAudioSourcePaused = false; 

void Awake() 
{ 
    if (_musicAudioSource == null) 
    { 
     _musicAudioSource = gameObject.AddComponent<AudioSource>(); 
     _musicAudioSource.loop = true; 
     _musicAudioSource.clip = clip; 
    } 

    //Check if Audio is playing. Don't play if already playing. 
    if (!_musicAudioSource.isPlaying) 
    { 
     _musicAudioSource.Play(); 
    } 
} 

void OnApplicationPause(bool pauseStatus) 
{ 
    //Check if this is Pause 
    if (pauseStatus) 
    { 
     //Pause Audio if it is playing 
     if (_musicAudioSource.isPlaying) 
     { 
      _musicAudioSource.Pause(); 

      //Set to true so that we will detamine whether to Play() or UnPause() the music next time 
      _musicAudioSourcePaused = true; 
     } 
    } 

    //Check if this is Resume 
    if (!pauseStatus) 
    { 
     //Make sure audio is not null. If null, getComponent again 
     if (_musicAudioSource == null) 
     { 
      _musicAudioSource = gameObject.AddComponent<AudioSource>(); 
      _musicAudioSource.loop = true; 
      _musicAudioSource.clip = clip; 
     } 

     //Check if we paused the audio then resume 
     if (_musicAudioSourcePaused) 
     { 
      _musicAudioSource.UnPause(); 

      //Set to false so that we will detamine whether to Play() or UnPause() the music next time 
      _musicAudioSourcePaused = false; 
     } 

     //Check if Audio is playing. Don't play if already playing. 
     if (!_musicAudioSource.isPlaying) 
     { 
      _musicAudioSource.Play(); 
     } 
    } 
} 
+0

Ich habe dieses Thema früher gefunden. Diesmal habe ich diesen Code komplett kopiert, ich habe einen Sound eingerichtet, der beim Start des Spiels zu spielen beginnt. Und es funktioniert gut. Aber wenn der externe Sound "ankommt", verschwindet der Spielsound. – dtamas80

+0

@ dtamas80 Der Code in meiner Antwort funktioniert? – Programmer

+0

Ich habe meinen vorherigen Kommentar aktualisiert, weil ich ihn versehentlich gesendet habe. – dtamas80