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".

Другие вопросы по тегам