Unity与HTML的交互

2016年10月14日 17:53 0 点赞 0 评论 更新于 2025-11-21 20:36

Unity为开发者提供了一套十分完善的图形化界面引擎,其中包含常见的窗口、文本框、输入框、拖动条、按钮、贴图框等。它还内置了多种用于交互的控件,如标签、按钮、输入框和拖动条等。借助Unity,开发者能够轻松设计出高效且美观的交互性界面。然而,当将Unity3D文件导出到Web端时,不可避免地需要通过HTML来控制Unity场景,因此有必要对Unity3D与HTML的交互性展开研究。

Unity3D调用HTML中的JavaScript函数

Unity3D浏览器可通过执行Application.ExternalCall()来调用HTML网页里定义的JavaScript函数。例如,以下代码调用了HTML网页里的SayHello()函数,并传递了“helloworld”作为参数:

Application.ExternalCall("SayHello", "helloworld");

在HTML网页里,需要定义SayHello()方法,示例如下:

<script type="text/javascript" language="javascript">
function SayHello(arg) {
// 函数体可根据需求编写具体逻辑
}
</script>

HTML调用Unity3D中的函数

ActiveX控件或Unity3D浏览器的插件都具备一个SendMessage()函数,HTML网页可通过该函数与Unity3D进行通信。通过SendMessage()函数可以传递对象名、函数名以及简单参数,随后它会调用Unity3D中与GameObject上绑定的函数。在调用SendMessage()函数之前,必须先获取UnityWebPlayer的引用,这里可以使用JavaScript对象DocumentgetElementById()函数来实现。

下面是一个具体例子,它会执行SendMessage()函数。嵌入在<object><embed>标签下的Unity Web Player的idUnityContentSendMessage函数会调用一个名为MyObject对象上的MyFunction()函数,并传递一句话作为参数。在Unity内容里,需要放置一个名为MyObject的对象,并在该对象上附加实现了名称为MyFunction函数的脚本文件。HTML实现的关键代码如下:

<script type="text/javascript" language="javascript">
function SaySomethingToUnity() {
// 获得Unity浏览器对象的ID
var unity = unityObject.getObjectById("UnityContent");
// 调用SendMessage函数访问Unity3D浏览器对象中的脚本函数
unity.SendMessage("MyObject", "MyFunction", "Hello from a web page!");
}
</script>

在Unity3D浏览器中,与MyObject对象绑定的函数MyFunction的正确写法如下:

void MyFunction(string param) {
// 这里可以编写函数的具体逻辑语句
}

通过上述两种方式,就可以实现Unity3D与HTML之间的交互,从而在Web端更好地控制和利用Unity场景。

作者信息

孟子菇凉

孟子菇凉

共发布了 3994 篇文章