对于我的移动Unity应用程序,我需要一个Web视图元素并使用UniWebView插件。如下代码所示,我编写了一个脚本来动态加载html字符串。在我的应用程序中,基于用户交互,包含场景将被多次加载。
在编辑器中和在iOS上,它均按预期工作。在Android上,将显示应用启动后首次加载场景的网络视图。但是稍后重新加载有时可以工作,有时只能随意地将空白区域显示为空白。尽管加载微调器可以工作,但仍会发生这种情况,因此这似乎是可视化失败。
脚本附在下面。我将脚本放在一个简单的面板游戏对象上,该对象仅用于定义屏幕区域。
有什么办法可以解决这个问题吗?
c()
答案 0 :(得分:0)
我发现您必须在UniWebView组件的LoadHTMLString()之前调用Show()。我在下面显示了Start()方法的最后几行。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class YouTubePlayer : MonoBehaviour
{
private UniWebView uniWebView;
public void Start()
{
uniWebView = GetComponent<UniWebView>();
if (uniWebView == null)
{
Debug.Log("YOUTUBE PLAYER: Adding uniwebview Component");
uniWebView = gameObject.AddComponent<UniWebView>();
}
uniWebView.OnPageStarted += (view, url) =>
{
Debug.Log("YOUTUBE PLAYER: OnPageStarted with url: " + url);
};
uniWebView.OnPageFinished += (view, statusCode, url) =>
{
Debug.Log("YOUTUBE PLAYER: OnPageFinished with status code: " + statusCode);
};
uniWebView.OnPageErrorReceived += (UniWebView webView, int errorCode, string errorMessage) =>
{
Debug.Log("YOUTUBE PLAYER: OnPageErrorReceived errCode: " + errorCode
+ "\n\terrMessage: " + errorMessage);
};
uniWebView.SetShowSpinnerWhileLoading(true);
uniWebView.ReferenceRectTransform = gameObject.GetComponent<RectTransform>();
uniWebView.LoadHTMLString(YoutubeHTMLString, "https://www.youtube.com/");
uniWebView.Show(true);
}
private static string YoutubeHTMLString =
@"<html>
<head></head>
<body style=""margin:0\"">
<iframe width = ""100%"" height=""100%""
src=""https://www.youtube.com/embed/Ccj_H__4KGQ"" frameborder=""0""
allow=""autoplay; encrypted-media"" allowfullscreen>
</iframe>
</body>
</html>";
}
我无法说出该解决方案为何有效,但我认为它是一个错误(在UniWebView,Unity或Android中)。这可能与后台的异步线程有关,这些线程有时会在Android上产生有问题的命令(我在Android 6.0.1上使用了旧的Nexus 5)。
尽管如此,我还是希望这对某人有帮助,因为我经历了两次尝试和错误的糟糕经历...;-)