适用于Unity的UniWebView插件在Android上任意失败

时间:2018-10-17 16:41:04

标签: android unity3d uniwebview

对于我的移动Unity应用程序,我需要一个Web视图元素并使用UniWebView插件。如下代码所示,我编写了一个脚本来动态加载html字符串。在我的应用程序中,基于用户交互,包含场景将被多次加载。

在编辑器中和在iOS上,它均按预期工作。在Android上,将显示应用启动后首次加载场景的网络视图。但是稍后重新加载有时可以工作,有时只能随意地将空白区域显示为空白。尽管加载微调器可以工作,但仍会发生这种情况,因此这似乎是可视化失败。

脚本附在下面。我将脚本放在一个简单的面板游戏对象上,该对象仅用于定义屏幕区域。

有什么办法可以解决这个问题吗?

c()

1 个答案:

答案 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)。

尽管如此,我还是希望这对某人有帮助,因为我经历了两次尝试和错误的糟糕经历...;-)