Unity 5.6 - VideoPlayer не воспроизводит аудио AudioSource
Я разрабатываю обновление для менеджера модов Subnautica, и я представил детектор пиратства, который воспроизводит пиратскую песню на весь экран со звуком, если пиратство обнаружено.
Видео воспроизводится правильно на RawImage
с помощью VideoPlayer
, но я не могу заставить звук работать.
Я искал в интернете и нашел много "исправлений", но ни одно из них не сработало.
Вот несколько, которые я попробовал:
videoPlayer.controlledAudioTrackCount = 1;
gameObject.AddComponent<AudioListener>().enabled = true;
audioSource.volume = 1f;
После исследования я наткнулся на этот отчет об ошибке, который, кажется, влияет на Unity 5.6.
К сожалению, я не могу обновить Unity, так как я занимаюсь моддингом.
Я попробовал обходной путь, представленный в отчете об ошибке, которыйvideoPlayer.renderMode = VideoRenderMode.MaterialOverride;
,
но это тоже не сработало.
Замечания:
videoPlayer.GetAudioChannelCount(0)
всегда возвращается2
audioSource.isPlaying
всегда возвращаетсяfalse
даже если я сделаюaudioSource.Play();
Вот мой код:
private IEnumerator PlayVideo()
{
VideoPlayer videoPlayer = gameObject.GetComponent<VideoPlayer>() ?? gameObject.AddComponent<VideoPlayer>();
AudioSource audioSource = gameObject.GetComponent<AudioSource>() ?? gameObject.AddComponent<AudioSource>();
videoPlayer.enabled = true;
audioSource.enabled = true;
videoPlayer.playOnAwake = false;
audioSource.playOnAwake = false;
videoPlayer.source = VideoSource.Url;
videoPlayer.url = videoURL;
videoPlayer.controlledAudioTrackCount = 1;
videoPlayer.waitForFirstFrame = false;
videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
videoPlayer.SetTargetAudioSource(0, audioSource);
videoPlayer.EnableAudioTrack(0, true);
videoPlayer.Prepare();
while (!videoPlayer.isPrepared)
{
yield return null;
}
GetComponent<RawImage>().texture = videoPlayer.texture;
videoPlayer.Play();
while (videoPlayer.isPlaying)
{
yield return null;
}
yield return StartCoroutine(PlayVideo());
}
Вы можете увидеть весь код на GitHub
РЕДАКТИРОВАТЬ: это тоже не работает
audioSource.bypassEffects = true;
audioSource.bypassListenerEffects = true;
audioSource.bypassReverbZones = true;
audioSource.dopplerLevel = 0;
audioSource.priority = 100000;
audioSource.ignoreListenerPause = true;
audioSource.ignoreListenerVolume = true;
audioSource.spatialBlend = 0;
audioSource.volume = 1f;
0 ответов
Я узнал, почему это не работает!
Судя по всему, в настройках проекта в игре были включены параметры "Отключить звук Unity".