Unity为开发者提供了一套非常完善的图形化界面引擎,它包括常见的窗口、文本框、输入框、拖动条、按钮、贴图框等。内置了多种用于交互的控件,包括标签、按钮、输入框和拖动条等。因此,通过Unity可以轻松的设计出高效美观的交互性界面。但是,将unity3d文件导出到Web端的时候,不可避免的需要通过HTML控制unity场景,这就需要对Unity3D与HTML的交互性进行研究。
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()就会调用Unity3D与GameObject上绑定的函数。在调用SendMessage()函数之前,必须先得到UnityWebPlayer的引用。这里可以使用JavaScript对象Document的getElementById()函数来获得该引用。
下面是一个例子,它会执行SendMessage()函数,嵌入在Object或embed标签下的Unityweb player的id是UnityContent,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) {
语句; }