返回介绍

Unity 网络播放器 (Web Player) 和浏览器通信

发布于 2021-06-19 18:03:24 字数 2441 浏览 1229 评论 0 收藏 0

包含 Unity 网络播放器 (Web Player) 内容的 HTML 页面可与该内容通信,反之亦然。基本上有两种通信方法:

  • 网页在 Unity 网络播放器 (Web Player) 内容中调用函数。
  • Unity 网络播放器 (Web Player) 内容在网页中调用函数。

下面对两种通信方法进行了详细阐述。

从网页中调用 Unity 网络播放器 (Web Player) 内容函数

Unity 网络播放器 (Web Player) 对象有一个 SendMessage() 函数,可从网页中调用,以便在 Unity 网络播放器 (Web Player) 内容中调用函数。该函数与 Unity 脚本 API 中的 GameObject.SendMessage 函数非常类似。从网页中调用时传递对象名称、函数名称和单个参数,SendMessage() 会在相应的游戏对象中调用给定函数。

为了调用 Unity 网络播放器 (Web Player) 的 SendMessage() 函数,必须先引用 Unity 网络播放器对象。可以在 Unity 生成的默认 HTML 中使用 GetUnity() 函数,获得对象引用。以下是一个 JavaScript 函数示例,它将在 Unity 网络播放器 (Web Player) 中执行 SendMessage() 函数,反过来 SendMessage() 会在名为 MyObject 的游戏对象中调用 MyFunction() 函数,传递一段字符串数据作为参数。

<script type="text/javascript" language="javascript">
<!--
//initializing the WebPlayer
var u = new UnityObject2();
u.initPlugin(jQuery("#unityPlayer")[0], "Example.unity3d");

function SaySomethingToUnity()
{
	u.getUnity().SendMessage("MyObject", "MyFunction", "Hello from a web page!");
}
-->
</script>

在 Unity 网络播放器内容中,必须拥有一个脚本附加到 MyObject 游戏对象 (GameObject) 中,该脚本须执行 MyFunction 函数:

function MyFunction(param : String)
{
    Debug.Log(param);
}

注意:请记住,如果函数没有任何参数,那么应传递一个空字符串 ("") 作为参数。

使用 SendMessage() 时须传递一个单字符串、整数或浮点数参数,该参数是调用方所需的。如果不需要该参数,则只传递零或其他默认值,在 Unity 上忽略。此外,名称指定的游戏对象可以路径名称的形式给出。例如,/MyObject/SomeChild 中的 SomeChild` 必须是 MyObject 的子对象,由于其名称前有 '/' 字符,MyObject`` 必须在根目录。

注意:如果游戏未完全加载,u.getUnity() 可能返回空值,所以最好是在使用 SendMessage() 前检查并确认该值不是空值。或等游戏完全加载,再尝试与其通信。

从 Unity 网络播放器内容中调用网页函数

为了从 Unity 网络播放器内容中调用网页函数,必须使用 Application.ExternalCall() 函数。使用该函数可以调用网页中定义的任何 JavaScript 函数,向其传递任意数量的参数。以下是一个 Unity 脚本示例,使用 Application.ExternalCall() 函数调用网页中名为 SayHello() 的函数,传递一段字符串数据作为参数:

Application.ExternalCall( "SayHello", "The game says hello!" );

该网页须定义 SayHello() 函数,例如:

<script type="text/javascript" language="javascript">
<!--
function SayHello( arg )
{
    // show the message
    alert( arg );
}
-->
</script>

从 Unity 网络播放器内容中执行任意浏览器代码

甚至不必在嵌入的网页中定义函数,而是使用 Application.ExternalEval() 函数从网络播放器内容中执行任意浏览器代码。

以下示例检查页面嵌入的网络播放器内容是否从某主机 (unity3d.com) 中提取,如果不是,则重定向至另一网址。该技术可防止深层链接至网络播放器内容:

Application.ExternalEval(
    "if(document.location.host != 'unity3d.com') { document.location='http://unity3d.com'; }"
);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文