Unity WebGL与JS脚本交互
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出现

具体扩展看项目需要自己加就行了
Unity WebGL与JS脚本交互的更多相关文章
- c++与js脚本交互,C++调用JS函数/JS调用C++函数
<!DOCTYPE html> <html> <body> <h1>我的第一段 JavaScript</h1> <p> Java ...
- c++与js脚本交互,C++调用JS函数JS调用C++函数
一.javascript调用c++,方法有两种 方案1: 1.html编写 <html><head></head><body><h1>TES ...
- Winform控件WebBrowser与JS脚本交互
1)在c#中调用js函数 如果要传值,则可以定义object[]数组. 具体方法如下例子: 首先在js中定义被c#调用的方法: function Messageaa(message) { ...
- 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析
作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析
作者: 牛A与牛C之间 时间: 2013-11-19 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第5篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- unity中js脚本与c#脚本互相调用
unity中js脚本与c#脚本互相调用 test1.js function OnGUI() { if(GUI.Button(Rect(25,25,100,30),"JS Call CS& ...
- Unity NGUI 网络斗地主 -发牌 脚本交互
Unity NGUI 网络斗地主 -发牌 脚本交互 @By 灰太龙 Unity4.2.1f4 NGUI 3.0.4 本篇说的问题是脚本与控件的交互! 现在对界面进行了改进,先看副图! 1.制作发牌效果 ...
- 样式其他与JS脚本语言
样式其他:display(显示block和隐藏none,不占位置) visibility(显示visible和隐藏hidden,占位置) overflow(超出范围 hidden隐藏) 透明(op ...
- Win8/Win7系统下用IE11浏览器调试js脚本
作为一个web开发者,调试js脚本是工作中的一部分,但是并不是所有的浏览器都会很好的兼容js脚本的.随着win8系统的发布,ie11也慢慢进入了大家的视野,ie11的众多优点及新特性就不必多说了(全面 ...
- Adriod与HTML+JS的交互
本篇主要实现的功能点: Android 调用HTML中的javascript脚本 HTML中的javascript脚本调用Android本地代码 Android 调用HTML中的javascript脚 ...
随机推荐
- 【Linux】常用
查看端口占用 yum install lsof lsof -i:8080:查看8080端口占用 lsof abc.txt:显示开启文件abc.txt的进程 lsof -c abc:显示abc进程现在打 ...
- 链接mysql数据库报错:2003-cant connect to Mysql server on ‘localhost’(10038)
今天用navicat连mysql时候突然报错了 我百度了一下,知道了是mysql服务没开,但是我打开了服务,发现服务里面没有mysql,于是就去cmd以管理员身份打开命令提示符,切换到安装mysql的 ...
- CCIE DC Multicast Part 4.
Hi Guys, Part 4 of my CCIE DC multicast article is presented below, in this article we are going to ...
- (三)用go实现平衡二叉树
本篇,我们用go简单的实现平衡二叉查找树.具体原理参考大佬博客即可:AVL树(一)之 图文解析 和 C语言的实现 1.节点定义 type AVLNode struct{ data int height ...
- JS中立即执行函数和闭包的区别
函数声明规则:必须指定一个函数名字 foo(); function foo() { console.log("函数声明") } 由于函数声明会被提升,所以调用函数可以在之前或之后调 ...
- 性能测试-ps与vmstat
1.ps命令-获取当前系统的进程状态 ps >ps(process status) 获取帮助: man ps 获取当前系统的进程状态 ps-ef-eF-elv 使用标准语法查看系统上的每个进程 ...
- 高效XML绑定框架JIBX
高效XML绑定框架JIBX demo源码地址 https://gitee.com/clover-clover/clover.git 具体路径: clover/clover-frame/clover-f ...
- python-djanggo 实现读取excel 表格在网页中展示
1.准备读取数据 放到项目文件夹下 2.熟悉表结构 3.准备处理依赖库 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas o ...
- Centos SSH 免密操作
1. 在本机生成公钥+私钥 ssh-keygen -t rsa 2. 发送密钥到目标服务器 ssh-copy-id root@192.168.137.111 3.尝试登录目标服务器 ...
- 使用git下载文件时提示身份验证失败
鼠标右键打开Git Bash Here窗口 输入git clone + 网址 后出现身份报错提示信息 需要重新修改一下用户名和邮箱就可以了 git config --global --replace- ...