Unity WebGl平台用C#跟JS交互

本文详细介绍如何在Unity WebGL项目中实现C#与JS的交互,包括定义JS函数、创建JS脚本、数据模型类的使用及JSON转换,以及如何在打包后的index页面进行测试。

Unity WebGl平台用C#跟JS交互

Unity WebGL

本人刚刚接触Unity的WebGL开发,不对的地方请指正,谢谢。

先贴上官方文档入口
https://docs.unity3d.com/2018.4/Documentation/Manual/webgl-interactingwithbrowserscripting.html链接

  1. 在你的项目里定义js前端响应事件(特性、关键词、返回值、函数名、参数)
// 定义JS函数
[DllImport("__Internal")]
private static extern void SetStudentData(string str);

[DllImport("__Internal")]
private static extern string GetStudentData();
  1. Plugins文件夹下面创建一个xxx.jslib脚本,注意一定按照啊官网添加unity内置函数如(Pointer_stringify()),否则数值会变成int类型的乱码,即unity分配的索引地址。
mergeInto(LibraryManager.library, {
  //上面是固定格式
  //这里的函数名要对应你在C#中使用extern关键词的函数名
  SetStudentData:function(x){
    unitySetStudentData(Pointer_stringify(x));
  },

  GetStudentData:function(){
    var returnStr  =  UnityGetStudentData();
    var bufferSize = lengthBytesUTF8(returnStr) + 1;
    var buffer = _malloc(bufferSize);
    stringToUTF8(returnStr, buffer, bufferSize);
    console.log("获取姓名:"+returnStr);
    return buffer;
  }
});
  1. 创建数据模型类并赋值
public class StudentData
{
    public int ID = 1;
    public string name = "张三";
} 
  1. 使用UnityEngine的JsonUtility将模型类转化成Json串,并调用第一步中外部定义的JS方法
public static void SetStudentData_Unity()
{
   StudentData studentData = new StudentData();
   string jsonStr = JsonUtility.ToJson(studentData);
   Debug.Log(jsonStr);
   SetStudentData(jsonStr);
}
  1. 测试
    如果JS中没有定义我们在步骤2里SetStudentData函数中调用的unitySetStudentData方法,调用时会报这个错误,记得定义
    在这里插入图片描述
    debug.log会在开发者工具的控制台中显示方便查看数据是否正确
    在这里插入图片描述
    打完包之后再index页面里添加临时方法测试
<script>
      var gameInstance = UnityLoader.instantiate("gameContainer", "Build/BPSQ-SolidState-V1.0-WebGL.json", {onProgress: UnityProgress});
	  function GetStudentData()
	  {
		alert("jsonData");
	  }
    </script>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序丑汉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值