我在Android版本上有音频播放问题。我使用Unity 5.4.0b15,但我在5.3.4p3上遇到了同样的问题。
我有简单的组件用于播放添加到场景中“AudioPlayer”GameObject的背景音乐。
public AudioClip clip;
private AudioSource _musicAudioSource;
private void Awake()
{
if (_musicAudioSource == null)
{
_musicAudioSource = gameObject.AddComponent<AudioSource>();
}
_musicAudioSource.loop = true;
_musicAudioSource.clip = clip;
_musicAudioSource.Play();
}
在Android设备上运行游戏后,音乐开始播放完美。但是当它运行时,我会收到任何通知或电话(电话,viber或任何其他按摩器)音乐停止播放。所有其他声音都在静音,我在游戏中使用过。重新开始播放音频的唯一方法是终止应用程序并再次运行它。
当我在使用原生播放器(如Play Music)收听任何音频时运行游戏时,也会遇到相同的问题。
在iOS上,一切都很完美。
答案 0 :(得分:6)
这绝对是Unity中的一个错误。我遇到了同样的问题并运行了一些测试来尝试修复它,但没有重新启动应用程序就无法恢复音频。
在我的测试中,我使用Google Hangouts通知来杀死音频。
程序员提议的修复不起作用,因为: 1.通知不会触发应用程序暂停或应用程序焦点事件。 2.初始化新的AudioListener和/或AudioSource实例也不会恢复音频。
这是Unity中的一个低级错误。我会报告这个错误。
答案 1 :(得分:2)
在iOS上,一切都很完美。
Android != iOS
。
使用OnApplicationPause(bool pauseStatus)
检测应用程序何时暂停和恢复。当应用已暂停时,pauseStatus
变量将返回true
;当恢复时,false
将返回pauseStatus
。因此,在true
为pauseStatus
时手动暂停音乐,并在false
为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();
}
}
}
时继续播放音乐。
dictionary.get('key')