从浏览器访问Unity Webgl输出,反之亦然

时间:2016-03-26 05:55:19

标签: javascript c# wordpress unity3d unity-webgl

我收到一个Unity webgl包并将其放入Wordpress的课程中。在Unity中生成的index.html是在iframe中访问的。这必须能够在访问课程时计算用户点击次数。

Unity开发人员只说变量是Click并且还有信息:

Application.ExternalCall("Send_Clicks", clickCount.ToString());

我阅读Unity文档,我应该创建一个js脚本来从Unity检索消息。如何从Unity检索消息?应该在哪里放置脚本?

非常感谢任何答案。谢谢。

2 个答案:

答案 0 :(得分:4)

修改

Unity现在支持Web Application.ExternalCall,因此您不再需要插件。对于那些使用旧版Unity的人,我会在这里留下旧答案。我们仍然建议您使用下面的旧答案,因为在打包的Chrome应用中使用Application.ExternalCall时会有security restrictions。插件不会发生这种情况。

OLD ANSWER

Application.ExternalCall仅适用于 WebPlayer Application.ExternalCall WebGL 工作。

这可以使用插件完成。 使您的JavaScript代码看起来像下面的内容。然后将其命名为PluginName.jslib。扩展名必须为 .jslib 。将其保存到资产/插件/ WebGL / PluginName.jslib

var MyPlugin = {
    Hello: function()
    {
        window.alert("Hello, world!");
    },
    HelloString: function(str)
    {
        window.alert(Pointer_stringify(str));
    },
};
mergeInto(LibraryManager.library, MyPlugin);

现在在C#中,您可以这样做:

using UnityEngine;
using System.Runtime.InteropServices;

public class NewBehaviourScript : MonoBehaviour {

    [DllImport("__Internal")]
    private static extern void Hello();

    [DllImport("__Internal")]
    private static extern void HelloString(string str);

    void Start() {
        Hello(); //Call Hello from JavaScript

        HelloString("This is a string."); //Call HelloString from JavaScript with parameter
    }
}

您必须包含using System.Runtime.InteropServices;才能执行此操作。 有关此问题的详细信息,请转到http://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html,然后从“从插件调用JavaScript函数”开始阅读。

答案 1 :(得分:1)

从技术上讲,你也可以使用jQuery。唯一的问题是,你必须确保它在onReady函数内。只是旁注。

Application.ExternalCall("Send_Clicks", clickCount.ToString());

为了进一步解释,上面的代码非常直截了当。你对`ExternalCall的参数是1:方法名2:参数参数。

你也可以传递不同数量的参数,只要确保你有正确的过载。

这是一个基本的例子。在你的Unity中让我们说你有这个函数叫做。

Application.ExternalCall("MyInfo", "John", 23);

并在你的wordpress页面。确保你有一个<script>标签正常的JS会做。

<script>
function MyInfo( arg1, arg2 )
    {
        alert("My name is :"+arg1 + " Age is : "+ arg2 );
    }
</script>

这很简单,通常在MVC中,JS放在页面<body>标记的底部。为了确保它,它知道所有的id和类名。祝你好运。