Problema de sonido en un juego de Android hecho en Unity
– UnityAssets3Free
hola , me llamo josel luis y para hoy os traigo
esta unity pregunta
Hice un juego 2d para Android en Unity y hay un problema. Hay sonidos en el juego (por ejemplo, sonido de botón de menú) que funcionan perfectamente.
Cuando salgo del juego (por ejemplo, con el botón de inicio) y vuelvo, los sonidos también funcionan bien.
Pero si recibo una notificación de sonido (correo electrónico, skpye, etc.), el juego se silencia hasta que salgo y reinicio el juego.
Intenté buscar la solución y encontré el método OnApplicationPause pero no me ayuda. no sé por qué…
¿Alguien tiene alguna idea de cuál podría ser el problema o la solución :)?
Gracias.
PARA EDITAR
Conecté mi teléfono a la computadora e intenté depurar y seguir el método OnApplicationPause.
El sonido se reproduce cuando comienza el juego.
Si presiono el botón de inicio, audioSource.Pause(); se llama y cuando vuelvo al juego audioSource.UnPause(); es tambien llamado. Y hay sonido.
Si recibo una llamada, audioSource.Pause(); se llama y cuando vuelvo al juego audioSource.UnPause(); es tambien llamado. Pero no hay sonido.
Si recibo una notificación (por ejemplo, un correo electrónico), no hay ninguna instrucción audioSource.Pause() y el sonido desaparece.
Las sentencias ‘if (audioSource == null)’ e ‘if (!audioSource.isPlaying)’ nunca se llaman.
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");
Con tu código actualizado, lo estás haciendo mal. O pauseStatus
la variable regresará true
cuando la aplicación es en pausay false
cuando la aplicación es reanudado. Entonces manualmente descanso la musica cuando pauseStatus
Está true
y luego reanudar la canción cuando pauseStatus
Está false
. Si no pausa el audio, es probable que no se vuelva a reproducir después de que el sistema se reanude.
También debe verificar que la fuente de audio esté null
antes de reproducir o reanudar el audio después pauseStatus
Está false
.. A continuación se muestra un ejemplo completo para que pueda comenzar.
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();
Configuración del proyecto/Reproductor/Otras configuraciones/Silenciar otras fuentes de audio*
Valorar
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
por hoy,hasta la proxima