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

Hen*_*ing 2 javascript c# wordpress unity-game-engine unity-webgl

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

Unity开发者只说变量是Click,还有信息:

Application.ExternalCall("Send_Clicks", clickCount.ToString());
Run Code Online (Sandbox Code Playgroud)

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

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

Pro*_*mer 5

编辑

Unity 现在支持Application.ExternalCallWebGL,因此您不再需要插件。对于那些使用旧版本 Unity 的人,我会在这里留下旧的答案。仍然建议使用下面的旧答案,因为在打包的 Chrome 应用程序中使用时存在安全限制Application.ExternalCall。插件不会发生这种情况。

旧答案

Application.ExternalCall仅适用于WebPlayerApplication.ExternalCall为工作的WebGL

这可以通过插件来完成。使您的 JavaScript 代码如下所示。然后命名PluginName.jslib。扩展名必须是.jslib。将其保存到Assets/Plugins/WebGL/PluginName.jslib

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

现在在 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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