Unity 游戏移植到 Intel® 架构以开拓中国市场的指南





3.00/5 (2投票s)
Unity 游戏移植到 Intel® 架构以开拓中国市场的指南
英特尔® 开发人员专区提供用于跨平台应用开发的工具和操作方法信息、平台和技术信息、代码示例以及同行专业知识,帮助开发人员创新和取得成功。加入我们的Android、物联网、英特尔® RealSense™ 技术和Windows社区,下载工具、访问开发套件、与志同道合的开发人员分享想法,并参与编程马拉松、竞赛、路演和本地活动。
概述
Unity* 软件是移动环境(Android* 和 iOS*)中最流行的游戏引擎之一。随着技术的进步,尤其是移动芯片中 GPU 速度的加快,玩家对 3D 移动游戏的需求越来越大。根据 维基百科,2014 年中国移动设备用户超过 12 亿,几乎是美国的 4 倍。随着英特尔® 处理器在中华人民共和国 (PRC) 移动市场份额的增长,开发人员希望了解如何为其基于 Unity 的游戏启用英特尔® 架构的 Android 手机/平板电脑,这是一个独特的蓬勃发展的市场,应用不是通过 Google Play 分发/销售的。中国有一些独特的情况,要求游戏开发人员在为这个最活跃和快速增长的国家开发和移植游戏时采取某些措施,本文将对此进行介绍。
Unity 游戏通用移植指南
如果游戏没有任何插件,将基于 ARM* 的 Unity 游戏移植到英特尔架构非常容易。我们将向您展示如何操作。
首先,下载 Unity 4.6 或更高版本。然后用 Unity 打开您的游戏项目。在“文件”菜单中选择“构建设置”。您将看到下面的窗口。
选择 Android 并点击 Player Settings 按钮后,将显示如下配置窗口。
确保设备筛选器选项为 FAT 或 x86,然后构建项目。您将获得一个支持 x86 原生的 APK。
然而,我们还没有完成。移动游戏有点复杂,因为它们包含用于执行各种任务的第三方插件。
插件对游戏移植的影响
大多数 Unity 游戏使用提供增值服务的插件。在中国,插件通常是下面列出的这些
插件类型 | 注释 |
---|---|
支付 SDK | 应用内购买 |
安全 SDK | 通过重新编译保护应用 |
异常处理程序 SDK | 远程调试游戏 |
广告 SDK | 在游戏中提供广告 |
平台访问 SDK | 为在线游戏提供账户服务 |
数据统计 SDK | 收集用户信息到后端服务器 |
云推送 SDK | 从服务器推送通知 |
每个插件的更完整描述如下。
支付 SDK
许多独立软件供应商 (ISV) 在游戏开发中注重收入收集。一种有效的方法是应用内购买,这需要支付插件。在中国有许多支付供应商,例如支付宝、财付通和微信支付等。此外,中国移动、中国联通和中国电信等电信运营商也为 ISV 提供了支付插件。
安全 SDK
大多数 Android 平台的游戏代码都是用 Java* 开发的,它被编译成 DEX 文件。这个文件很容易成为反编译破解的目标。因此,需要安全保护。爱加密、360、梆梆和娜迦都是中国市场主要的网络安全供应商。
异常处理程序 SDK
Android 软件的调试通常包括检查日志、设置断点和逐步观察运行参数。当发生崩溃时,转储崩溃信息会更有效,尤其是在应用程序发布之后。这些信息包括平台寄存器和调用堆栈。一些 ISV 将异常处理程序与游戏结合起来以跟踪日志信息。因此,例如,中国 ISV 腾讯开发了一个名为 Bugly 的 SDK,它集成了腾讯所有应用程序和游戏的异常处理。
广告 SDK
与应用内购买一样,游戏中集成的广告是游戏开发商创收的另一种商业模式。
平台访问 SDK
许多游戏,尤其是网络游戏,希望玩家拥有账户,以便记录他们的进度并将分数存储在后端服务器中。因此,QQ 和微信等流行的中国账户系统已被嵌入到游戏中。
数据统计 SDK
数据统计 SDK 记录游戏玩家的统计数据,开发人员可以利用这些数据来优化和修改游戏。
云推送 SDK
此 SDK 从服务器向用户发送通知。
将 Android 游戏启用为 x86 原生时,所有相关的 SDK 都必须先移植到 x86,然后才能插入 Unity;否则,游戏将无法在基于英特尔架构的平台上良好运行。
这是一个将 Unity 插件启用为 x86 原生的好例子。
案例研究:全民突击
《全民突击》是腾讯光速工作室首款 3D 第一人称射击手游。它拥有超过 1.37 亿注册用户和每月 2600 万活跃用户;它是目前中国最流行的手游之一。
《全民突击》的 ARM 版本在 lib/armeabi-v7a 文件夹中有 11 个库,但只有 libunity.so、libmain.so 和 libmono.so 这三个库实际负责游戏渲染。其余的都是插件。例如,libtpnsSecurity.so 是一个用于游戏安全的插件 SDK,具有防盗和反逆向工程功能。
首先,我们需要将此文件夹中的所有库移植到 x86 原生,如下所示。
然而,当此 APK 安装在 x86 Android 5.0 上时,由于 libwbsafeedit 库(这是一个隐藏在 assets 文件夹中的 ARM 二进制文件),游戏崩溃了。
当我们按照如下方式为 x86 启用此库时,该应用程序在基于英特尔架构的设备上运行良好。
但并非所有库都可以轻松移植到 x86 原生。以 libBugly.so 库为例。它负责跟踪崩溃信息并将其上传到云端。它还从 NDK C/C++ 代码获取堆栈信息,因此它涉及系统平台的 ASM 函数。在成功编译为 x86 原生之前,我们不得不将部分代码从 ARM 重写为 x86。
性能比较
我们在 x86 设备上对 ARM 版本和 x86 版本进行了一些性能比较。结果如下。
移植后,平均功耗比通过 Native Bridge 运行时提高了约 10%。CPU 和 RAM 利用率分别降低了 26% 和 21%。
此外,Fat(ARM+x86)的 APK 大小仅比 ARM 版本大 9 MB。
全民突击 | APK 大小 |
---|---|
ARM | 234M |
Fat (X86+ARM) | 243M |
性能测试中使用的软件和工作负载可能仅针对英特尔微处理器进行了性能优化。SYSmark* 和 MobileMark* 等性能测试是使用特定的计算机系统、组件、软件、操作和功能测量的。任何这些因素的改变都可能导致结果不同。您应该查阅其他信息和性能测试,以帮助您充分评估您考虑的购买,包括该产品与其他产品结合时的性能。配置:[描述配置 + 使用了什么测试 + 谁进行了测试]。更多信息请访问 http://www.intel.com/performance。
结论
要使用 Unity 创建 Android 游戏,通过移植到 x86 原生,您将在英特尔架构上看到性能提升。但 Unity 引擎并非唯一必须移植的东西;所有相关的插件也必须移植。如果您想成功地将 Unity 游戏移植到 x86 原生,您应该提前为这些插件进行移植。
关于作者
彭涛是英特尔软件和服务部门的软件应用工程师。他目前专注于游戏启用和性能优化,特别是在 Android 移动平台上。