En este momento estás viendo Problema de sonido en un juego de Android hecho en Unity

 – Unity

Problema de sonido en un juego de Android hecho en Unity – Unity

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

Deja una respuesta