使用Unity发布WebGL项目免不了要与Js进行通信,所以整理下相关知识。
一 Unity调用Js方法
1.弃用的方法
(1)在发布的WebGL项目的index.html添加Exit函数:
function Exit() { alert("UnityToWeb") }
(2)如果想在Unity中调用方法,添加代码:
Application.ExternalCall("Exit");//调用Js的Exit方法
2.新方法
(1) 新建文件夹Plugins
(2) 文件夹新建.jslib文件,这里创建__Internal.jslib文件
添加代码
mergeInto(LibraryManager.library, {
Hello: function () {
window.alert("Hello, world!");
Exit();//调用Js方法
},
});
(3)c#文件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;
/// <summary>
/// Unity调用Js
/// </summary>
public class UnityToWeb : MonoBehaviour
{
//引入方法
[DllImport("__Internal")]
private static extern void Hello();
void Start()
{
Hello();//调用定义方法
}
/// <summary>
/// Unity调用JSExit方法
/// </summary>
public void Exit()
{
// Application.ExternalCall("Exit");
}
}
(5)在发布的WebGL项目的index.html添加Exit函数:
function Exit() { alert("UnityToWeb") }
二 Js调用Unity方法
1.在场景中新建空物体,命名WebWithUnity,然后在新建脚本WebToUnity。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class WebToUnity : MonoBehaviour
{
public Text text;
public void JsToUnity(string a)
{
text.text = a;
}
}
2.这里,我们要在Js中调用JsToUnity这个函数,将项目打包后,修改index.html文件。`
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Unity WebGL Player | RoamWeb</title>
<link rel="shortcut icon" href="TemplateData/favicon.ico">
<link rel="stylesheet" href="TemplateData/style.css">
<script src="TemplateData/UnityProgress.js"></script>
<script src="Build/UnityLoader.js"></script>
<script>
var unityInstance = UnityLoader.instantiate("unityContainer", "Build/Web4.json", {onProgress: UnityProgress});
function Exit() { alert("UnityToWeb") }//Exit方法
function TestSend() { unityInstance.SendMessage("WebWithUnity", "JsToUnity","WebToUnity"); }//js调用Unity方法,WebWithUnity是调用方法脚本挂在的物体(第一阶层),JsToUnity是调用方法,WebToUnity是传递的参数。
</script>
</head>
<body>
<div class="webgl-content">
<div id="unityContainer" style="width: 960px; height: 600px"></div>
<div class="footer">
<div class="webgl-logo"></div>
<div class="fullscreen" onclick="unityInstance.SetFullscreen(1)"></div>
<div class="title">RoamWeb</div>
<button Type="button" onclick="TestSend()">WebToUnity</button>//测试按钮。
</div>
</div>
</body>
</html>