如何从jslib插件Unity webgl中调用外部JavaScript函数

5

我正在进行一个webgl项目,尝试在plugin.jslib中调用index.html中的javascript函数。

我搜索了一些方法,但似乎它们并不起作用。
有没有适当且简单的方法来实现这个呢?

下面是我尝试过的代码。

index.html:

<!DOCTYPE html>
<html lang="en-us">
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>%UNITY_WEB_NAME%</title>
    <link rel="shortcut icon" href="TemplateData/favicon.ico">
    <link rel="stylesheet" href="TemplateData/style.css">
    <script src="TemplateData/UnityProgress.javascript"></script>
    <script src="%UNITY_WEBGL_LOADER_URL%"></script>
    <script type="text/javascript">
        window.CheckLoad = function(){ window.alert('It is working!!'); };
    </script>
    <script>
        var gameInstance = UnityLoader.instantiate("gameContainer", "%UNITY_WEBGL_BUILD_URL%", {onProgress: UnityProgress});
    </script>
</head>
<body>
 ...
</body>
</html>

plugin.jslib

mergeInto(LibraryManager.library {
    Loaded: function()
    {
        window.CheckLoad();
    },
}); 

Unity C#脚本

public class blablabla : MonoBehaviour
{
    [DllImport("__Internal")]
    private static extern void Loaded();

    public static void IsLoaded()
    {
#if !UNITY_EDITOR && UNITY_WEBGL
        Loaded();
#endif
    }

    void Start()
    {
        IsLoaded();
    }
}

你在控制台里看到任何错误了吗? - Papa
@Papa 实际上,存在构建错误,因此无法测试。 - dav0803
@Papa,我已经弄清楚了。问题出在我错误地使用了jslib。不管怎样,还是谢谢你! - dav0803
1个回答

4

嗯...我真是太蠢了。
结果证明这是我的错误,而且做这些事情的方法非常简单。

对于那些可能有相同问题的人,请检查以下代码。

index.html

<!DOCTYPE html>
<html lang="en-us">
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>%UNITY_WEB_NAME%</title>
    <link rel="shortcut icon" href="TemplateData/favicon.ico">
    <link rel="stylesheet" href="TemplateData/style.css">
    <script src="TemplateData/UnityProgress.javascript"></script>
    <script src="%UNITY_WEBGL_LOADER_URL%"></script>
    <script>
        var gameInstance = UnityLoader.instantiate("gameContainer", "%UNITY_WEBGL_BUILD_URL%", {onProgress: UnityProgress});

        function CheckLoad(){
           window.alert("WORKING~!");
        }
    </script>
</head>
<body>
 ...
</body>
</html>

plugin.jslib

var plugin = {
    Loaded: function()
    {
        CheckLoad();
    }
};

mergeInto(LibraryManager.library, plugin);

我在script.js文件中的DOMContentLoaded事件中有我的JS函数。并且试图从.jslib文件中调用它。但是我得到了一个ReferenceError:[函数名]未定义。.js文件通过script标签添加到HTML页面中。 - undefined
只是为了回答自己的问题,我在DOM加载时添加了函数,但没有起作用。将函数放在.js文件的根目录中,使它们可用。我想这可能是某种竞争条件。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接