Unity WebGL与JS脚本交互
2024-10-21 18:46:06
1.Unity调用JavaScript脚本方法
老版本方法
之前Unity提供的Application.ExternalCall方法现在已经被设为过时弃用。(但是现在还能用,但是不知道什么时候可能就不能用了)
Unity发送消息给JS
unity想要和js交互,提供了一个函数:Application.ExternalCall();此函数仅限于web平台下。我们编辑发布的html文件,在里面加入我们的js脚本方法如下:
需要家<script></script>标签
function GetID(id)
{
alert("序号:"+id);
}
unity里面使用
Application.ExternalCall("GetID","大概看了");
新版本方法
1.首先在Plugins文件下创建后缀为.jslib 文件,将浏览器脚本写在里面
格式如下:
mergeInto(LibraryManager.library,
{ Hello: function ()
{
window.alert("Hello, world!");
}, HelloString: function (str)
{
window.alert(Pointer_stringify(str)); }, HelloFloat: function ()
{
return 1;
}, });
这里可以添加若干个方法,方法之间记得用逗号隔开,否则WebGL平台打包的时候会报错
2.新建C#脚本引用Js方法(unity调用JS)
格式如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;
using UnityEngine.UI;
public class CallJs : MonoBehaviour
{ [DllImport("__Internal")]
public static extern void Hello(); [DllImport("__Internal")]
public static extern void HelloString(string str);
[DllImport("__Internal")]
public static extern int HelloFloat(); }
3.最后是测试脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class Btn : MonoBehaviour
{
public Button btn1;
public Button btn2;
public Button btn3;
public InputField inputField;
// Start is called before the first frame update
void Start()
{
btn1.onClick.AddListener(delegate { Debug.Log(1);
CallJs.Hello();
});
btn2.onClick.AddListener(delegate { Debug.Log(2);
CallJs.HelloString("这是JS");
});
btn3.onClick.AddListener(delegate { Debug.Log(CallJs.HelloFloat());
});
} }
4.打包测试即可(测试结果如下)
5.JS调用Unity方法
测试脚本方法如下
需要在打包好的html文件里面加入要调用的方法(打webgl包里有有index.html编辑此文件测试即可)
下面是测试方法 (放到<body></body>里面)
unityInstance.SendMessage("GameManager","测试JS2","这是JS啊");
里面三个参数依次是:场景中挂载脚本(CallJs)物体的名字,你写的脚本方法,需要传的参数
<button id="lool">测试</button>
<button id="lool1">测试1</button>
<script>
function Hello(){
unityInstance.SetFullscreen(0);
unityInstance.SendMessage("GameManager","测试JS1");
console.log(unityInstance);
};
document.getElementById("lool").onclick=Hello; document.getElementById("lool1").onclick=function(){
// unityInstance.SetFullscreen(0);
unityInstance.SendMessage("GameManager","测试JS2","这是JS啊");
};
</script>
测试结果
点击测试出现
点击测试1出现
具体扩展看项目需要自己加就行了
最新文章
- 带callback的future实现
- 图文介绍如何在Eclipse统计代码行数
- 使用ef查询有缓存的问题
- js基础篇——原型与原型链的详细理解
- 我的游戏蜗牛web前端面试经历
- Eclipse 安装插件【转】
- 网络加速手段之一,JS文件资源合并下载
- Hadoop学习笔记3---安装并运行Hadoop
- 5.JSON
- CoreGraphics 之CGAffineTransform仿射变换(3)
- Intersecting Lines(数学)
- 3TB硬盘的容量已经超出了传统分区标准的支持
- Nodejs MSSQL详细解读
- 侧滑面板(对viewGroup的自定义)
- 使用cookie保存用户名和密码
- C# autocomplete
- apk的安装删除
- Java中多环境Logback配置与ELK日志发送
- echarts.js制作中国地图
- [翻译] About Core Image