在unity特殊文件夹Plugins下,首先建立一个后缀名为jslib文件的名称,自行定义文件名称:
var MyPlugins = {
$unityGameObjectName: "",
GetUnityGameObjectName: function(GameObjectName_) {
unityGameObjectName = Pointer_stringify(GameObjectName_);
console.log("Untiy发送到JS的参数: " + unityGameObjectName);
var a = "4565";
SendMessage(unityGameObjectName, "TestB", a);
}
};
autoAddDeps(MyPlugins, '$unityGameObjectName');
mergeInto(LibraryManager.library, MyPlugins);
- $unityGameObjectName: 定义接收物体的变量名,其中美元符在JS里是可以当做identifier的,也就是说可以当成变量名称,或者函数名称;
- GetUnityGameObjectName: js中写得函数,也就是C#调用的 js 函数;
- Pointer_stringify(str): 是固定写法,表示要传入一个参数,类型为str;
- 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;
GetUnityGameObjectName(str);
}
public void TestB(string str)
{
UnityEngine.Debug.Log("接收网页传过来的参数:" + str);
}
}
使用 [DllImport("__Internal")] 与外部脚本交互,extern 是声明在外部实现的方法,所以需要用static修饰。
|