在同一场景上加载多个视频时,Unity App会冻结

时间:2017-03-15 05:02:27

标签: android video unity3d

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

在我尝试导航的场景中有预制片,用于加载列表缩略图中的视频,之前我正在加载图像而不是视频而且它工作正常,现在当尝试加载视频时,它在Axon 7上冻结了38秒以上(4GB RAM)和One Plus 3(6 GB RAM)上32秒,但在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 我正在使用Script在RawImage上加载VideoPlayer。这是RawImage在Play mode along with VideoPlayerinactive mode中的样子。

2 个答案:

答案 0 :(得分:2)

对于我的问题。我必须对此StackOverflow Question

中使用的VideoPlayer API脚本进行一些更改

在我从该链接使用的脚本中。 Co-routine在Start()函数内启动,使8个不同预制件中的视频即使在暂停模式下也能立即加载。

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

更改
RawImage

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

}

P.S:您还可以看到我的YouTube Video TutorialBlog on Playing Videos smoothly in Unity

答案 1 :(得分:1)

这是一个众所周知的错误,使用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