【问题标题】:Unity App freezes when loading Multiple Videos on same Scene在同一场景上加载多个视频时 Unity 应用程序冻结
【发布时间】:2017-03-15 05:02:27
【问题描述】:

从菜单导航到包含 8 个 1 分钟 MP4 视频的场景时,这些视频使用 RawImage 组件上的新 VideoPlayer 脚本播放。我正在使用 Unity 5.6.0b11 测试版。

在我尝试导航的场景中,预制件在列表缩略图中加载视频,以前我加载的是图像而不是视频,它工作正常,现在当尝试加载视频时,它在 Axon 7 上冻结超过 38 秒(4GB RAM)和 32 秒在一加 3(6GB RAM)上,但在 Unity Player 本身上播放时完全不滞后。

我用于 VideoPlayer 的脚本来自 StackOverflow Question

button.onClick.AddListener(new UnityEngine.Events.UnityAction(() =>
{
   SceneManager.LoadSceneAsync("SceneSponsors");
   StartCoroutine(CloseMenu());
}));

有没有办法,我可以解决慢速加载场景或在应用程序启动时加载 mainScene 并在需要导航时在后台预加载它们。

我看到 somewhere Resources.Load() 在 Android 设备上也让它变慢,但我已经通过删除所有用于加载图像精灵的 Resources.Load() 进行测试,但问题仍然存在。

编辑: 这是我的CloseMenu() 函数,它仅用于滑动和移动菜单面板。 P.S 应用程序仅在加载特定场景时冻结,其他场景也能顺利运行。

IEnumerator CloseMenu()
{
    if (IsOpen)
    {
        Vector3 pos = MainMenuWindow.transform.position;
        iTween.ColorUpdate(CloseArea, new Color(0, 0, 0, 0f), .6f);
        iTween.MoveTo(MainMenuWindow.gameObject, new Vector3(Screen.width, pos.y, pos.z), .6f);
        IsOpen = false;
        yield return new WaitForSeconds(.3f);
        CloseArea.transform.position = new Vector3(-240 * ScaleFact, CloseArea.transform.position.y, CloseArea.transform.position.z);
    }
}

编辑 2 我正在使用脚本在 RawImage 上加载 VideoPlayer。这是 Play mode along with VideoPlayerinactive mode 中 RawImage 的样子。

【问题讨论】:

  • 你的CloseMenu函数是什么样的?
  • @Programmer 我已经添加了这个功能。顺便说一句,应用程序仅在加载该特定场景时冻结,并且适用于其他场景
  • 嗯,CloseMenu 函数中没有任何事情发生。 38秒太长了。请检查您在 OnEnable、Awake 或 Start 函数中运行的代码。将它们全部禁用,然后一一重新启用它们。您会找到导致问题的原因。请张贴那个。

标签: android video unity3d


【解决方案1】:

对于我的问题。我不得不对 VideoPlayer API 脚本进行一些更改,我使用的是 StackOverflow Question

在我从该链接使用的脚本中。 Co-routine 是在 Start() 函数中启动的,它可以在 8 个不同的 prefab 中制作视频,即使它们处于暂停模式也可以立即加载。

所以我添加了一个新函数PlayVideoOnClick() 并将其附加到RawImage点击事件,所以现在只有在点击RawImage 时才会加载视频。

改变自

public void Start()
{
    Application.runInBackground = true;
    StartCoroutine(playVideo());

}

public void PlayVideoOnclick()
{
    Application.runInBackground = true;
    StartCoroutine(playVideo());

}

P.S:你也可以看我的 YouTube Video TutorialBlog on Playing Videos smoothly in Unity

【讨论】:

    【解决方案2】:

    这是一个众所周知的错误,使用 LoadSceneAsync 加载大场景可能会完全阻塞 gpu 几秒钟(在编辑器中完全不明显),我也关注这个问题已经有一段时间了,
    来自论坛:
    https://forum.unity3d.com/threads/starting-async-load-causes-massive-lag-spike.288755/
    官方统一问题跟踪器:
    https://issuetracker.unity3d.com/issues/loading-a-scene-async-creates-huge-performance-spikes-for-the-gpu

    【讨论】:

    • 大场景是什么意思。为什么 2Mb 文件大小的视频,其中 8 个是从 Internet 加载的。是不是16-20Mb也是大场面。
    猜你喜欢
    • 2022-08-02
    • 2019-07-11
    • 2017-12-15
    • 2015-09-07
    • 1970-01-01
    • 2012-06-14
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多