从菜单导航到包含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 VideoPlayer和inactive mode中的样子。
答案 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 Tutorial和Blog 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