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");
}
}
}
'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
Ich habe meinen Code zum Beitrag hinzugefügt. Vielen Dank. – dtamas80
Meine Antwort hinzugefügt. Schau mal. Wenn möglich, vermeide 'PlayOneShot' und benutze' Play'. Mein Codebeispiel sollte Ihr Problem lösen. – Programmer