UnityWebGL与JS前端交互,不通过HTML

在unity特殊文件夹Plugins下,首先建立一个后缀名为jslib文件的名称,自行定义文件名称:

var MyPlugins = {
    $unityGameObjectName: "",
    //得到unityGameObjectName接收消息的物体
    GetUnityGameObjectName: function(GameObjectName_) {
        unityGameObjectName = Pointer_stringify(GameObjectName_);
        console.log("Untiy发送到JS的参数: " + unityGameObjectName);

        var a = "4565";
        //JS往Unity发送消息
        SendMessage(unityGameObjectName, "TestB", a);
    }
};
autoAddDeps(MyPlugins, '$unityGameObjectName');
mergeInto(LibraryManager.library, MyPlugins);
  1. $unityGameObjectName: 定义接收物体的变量名,其中美元符在JS里是可以当做identifier的,也就是说可以当成变量名称,或者函数名称;
  2. GetUnityGameObjectName: js中写得函数,也就是C#调用的 js 函数;
  3. Pointer_stringify(str): 是固定写法,表示要传入一个参数,类型为str;
  4. mergeInto(LibraryManager.library,MyPlugins): 固定写法;
using UnityEngine;
using System.Runtime.InteropServices;

public class UnityCallJS : MonoBehaviour
{
    [DllImport("__Internal")]
    public static extern void GetUnityGameObjectName(string str);
    void Start()
    {
        string str = gameObject.name;
        //Unity调用JS方法
        GetUnityGameObjectName(str);
    }
    
    public void TestB(string str)
    {
       UnityEngine.Debug.Log("接收网页传过来的参数:" + str);
    }
}

使用 [DllImport("__Internal")] 与外部脚本交互,extern 是声明在外部实现的方法,所以需要用static修饰。

你可能感兴趣的:(Unity,WebGL,unity,c#,webgl,javascript)