Unity为开发者提供了一套非常完善的图形化界面引擎,它包括常见的窗口、文本框、输入框、拖动条、按钮、贴图框等。内置了多种用于交互的控件,包括标签、按钮、输入框和拖动条等。因此,通过Unity可以轻松的设计出高效美观的交互性界面。但是,将unity3d文件导出到Web端的时候,不可避免的需要通过HTML控制unity场景,这就需要对Unity3DHTML的交互性进行研究。

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

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

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

<Script type = "text/javascript" language = "javascript">

function SayHello(arg)

{ }

</Script>

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

下面是一个例子,它会执行SendMessage()函数,嵌入在Objectembed标签下的Unityweb playeridUnityContent,SendMessage函数会从一个名为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对象绑定的函数 MyFunctionfunction MyFunction(param String) {

语句; }