- 用户指南
- 资源商店 (Asset Store)
- 资源服务器 (Asset Server)(仅限团队许可证)
- 缓存服务器(仅限团队许可证)
- 幕后场景
- 创建游戏
- 运行时实例化预设 (Prefabs)
- 变换 (Transforms)
- 物理
- 添加随机的游戏元素
- 粒子系统(Particle Systems)
- Mecanim 动画系统
- 旧动画系统
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Sound (音频侦听器)
- 游戏界面元素
- 多玩家联网游戏
- iOS 开发入门
- Android 开发入门
- Blackberry 10 开发入门
- Metro:入门指南
- 本地客户端开发入门
- FAQ
- Advanced
- Vector Cookbook
- 资源包(仅限专业版)
- Graphics Features
- 资源数据库 (AssetDatabase)
- 构建播放器管道
- 分析器(仅限专业版)
- 光照贴图快速入门
- 遮挡剔除(仅限专业版)
- 相机使用技巧
- 运行时加载资源
- 通过脚本修改源资源
- 用程序生成网格几何体
- 富文本
- 在 Unity 工程 (Project) 中使用 Mono DLL
- 事件函数的执行顺序
- 移动优化实用指南
- Unity XCode 工程结构
- 优化图形性能
- 减少文件大小
- 理解自动内存管理
- 平台依赖编译
- 泛型函数
- 调试
- 插件(专业版/移动版特有功能)
- 文本场景文件格式(仅限专业版)
- 流媒体资源
- 启动时运行编辑器脚本代码
- 网络模拟
- VisualStudio C 集成
- 分析
- 检查更新
- 安装多版本 Unity
- 故障排除
- Unity 中的阴影
- Unity 中的 IME
- 对集成显卡进行优化
- 网络播放器 (Web Player) 部署
- 使用网络播放器中的信任链系统
Unity 网络播放器 (Web Player) 和浏览器通信
包含 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论