如何从Unity内部检索页面信息?

时间:2019-01-17 12:16:03

标签: javascript unity3d dom

我需要在两个方向上与页面通信Unity WebAssemly。

这是我从页面执行Unity功能的方式:

<script>
    var gameInstance = UnityLoader.instantiate("gameContainer", "https://propper_url/Build/_Builds.json", {onProgress: UnityProgress});

    function unityObjectFun(index)
    {
        gameInstance.SendMessage ("ObjectInstance", "objectFunctionName", index);
    }
</script>

<a onclick="unityObjectFun(1)">invoke</a>

<div class="webgl-content">
    <div id="gameContainer" myValue="need this to read from Unity"></div>
</div>

但是我该怎么做相反。是否可以从Unity检索myValue。

或者可以通知页面Unity已加载场景并开始播放,以便我可以将myValue发送给它吗?

1 个答案:

答案 0 :(得分:1)

要在Unity WebAssembly的页面上执行任何JavaScript代码,需要做两件事:

  1. 创建Javascript代码作为插件。
  2. 将代码导入Unity脚本中。

整个过程在本指南中进行了描述:https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html

插件代码必须位于Assets / Plugins / pluginname.jslib路径(扩展名很重要)中,并且具有类似的结构:

mergeInto(LibraryManager.library, {
    Hello: function () {
        window.alert("Hello, world!");
    },
    HelloReturn: function () {
        return "Hello, world!";
    }
}

要使用它,需要导入:

using System.Runtime.InteropServices;

public class NewBehaviourScript : MonoBehaviour {

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

    [DllImport("__Internal")]
    private static extern string HelloReturn();

    void Start() {
        Hello();
        Debug.log(HelloReturn());
    }
}