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脚本交互的更多相关文章

  1. c++与js脚本交互,C++调用JS函数/JS调用C++函数

    <!DOCTYPE html> <html> <body> <h1>我的第一段 JavaScript</h1> <p> Java ...

  2. c++与js脚本交互,C++调用JS函数JS调用C++函数

    一.javascript调用c++,方法有两种 方案1: 1.html编写 <html><head></head><body><h1>TES ...

  3. Winform控件WebBrowser与JS脚本交互

    1)在c#中调用js函数 如果要传值,则可以定义object[]数组. 具体方法如下例子: 首先在js中定义被c#调用的方法: function Messageaa(message) {       ...

  4. 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析

    作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  5. 【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析

    作者: 牛A与牛C之间 时间: 2013-11-19 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第5篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  6. unity中js脚本与c#脚本互相调用

    unity中js脚本与c#脚本互相调用   test1.js function OnGUI() { if(GUI.Button(Rect(25,25,100,30),"JS Call CS& ...

  7. Unity NGUI 网络斗地主 -发牌 脚本交互

    Unity NGUI 网络斗地主 -发牌 脚本交互 @By 灰太龙 Unity4.2.1f4 NGUI 3.0.4 本篇说的问题是脚本与控件的交互! 现在对界面进行了改进,先看副图! 1.制作发牌效果 ...

  8. 样式其他与JS脚本语言

    样式其他:display(显示block和隐藏none,不占位置)  visibility(显示visible和隐藏hidden,占位置)  overflow(超出范围 hidden隐藏) 透明(op ...

  9. Win8/Win7系统下用IE11浏览器调试js脚本

    作为一个web开发者,调试js脚本是工作中的一部分,但是并不是所有的浏览器都会很好的兼容js脚本的.随着win8系统的发布,ie11也慢慢进入了大家的视野,ie11的众多优点及新特性就不必多说了(全面 ...

  10. Adriod与HTML+JS的交互

    本篇主要实现的功能点: Android 调用HTML中的javascript脚本 HTML中的javascript脚本调用Android本地代码 Android 调用HTML中的javascript脚 ...

随机推荐

  1. React自定义组件参数小驼峰命名提示警告 Warning: React does not recognize the `xxXxx` prop on a DOM element.

    Warning: React does not recognize the `xxXxx` prop on a DOM element. If you intentionally want it to ...

  2. Linux 第六节( 磁盘系统,挂载,分区,格式化)

    /dev/st0   磁带机 /dev/lp     打印机 /dev/cdrom  光驱 /dev/sd       scsi接口硬盘 sata接口硬盘  U盘(sda,sdb,sdc   分别对应 ...

  3. C# load and unload dll

    1. Invoker Any c# project Create a new application domain Create a proxy within the domain Unload th ...

  4. 问题记录_IDEA版本2021.2.3_debug时变量显示不全(只显示线程附近部分)

    问题记录_IDEA版本2021.2.3_debug时变量显示不全(只显示线程附近部分) 起因 把IDEA的版本从2019升级到了2021.2.3,在debug的时候发现变量的值能看到的很少,并不像20 ...

  5. Linux_CMD_FOR_FILE&FOLDER

    0,删除文件夹和子文件夹:rm -rf /xxx/xxx 0,拷贝整个文件夹:cp -r /xxx/xxx /ddd/ 0,改文件名:mv oldName newName 0,新建文件:touch f ...

  6. 可收集ALC问题[Microsoft.Data.SqlClient is not supported on this platform.]

    异常 Microsoft.Data.SqlClient is not supported on this platform. 堆栈跟踪 at Microsoft.Data.SqlClient.SqlC ...

  7. 批量检测URL中的关键词,并且将不含有关键词的URL输出到txt文件当中

    编写代码时遇到的问题 写入txt(一开始忘记了tuple类型需要转换为str) 处理逻辑(一开始并没有将 body与url绑定到一起,所以或返回所有的url) 关闭太早(这点是有点疑惑的,难道不用关闭 ...

  8. Kubernetes中pod UID的一个用法

    Kubernetes中每个工作Node的路径/var/lib/kubelet/pods里,含该Node上生成的每个pod的一些log文件.而该log文件的名字就是pod对应的UID,如下图所示(Nod ...

  9. Xilinx-英文缩写

    BEL: Basic Element of Logic, BEL是最底层的基本元素,也可以叫atomic unit(原子单位),BEL是FPGA中最小.不可分割的组件. ACP:Accelerator ...

  10. 解决 django channel: zadd() got an unexpected keyword argument 'daphne.response.HzSXMUhzYL!QSfUgrDObf'

    在stackoverflow上找到答案 If you are using Redis version 3.0 or above, it will not work with channels vers ...