随着技术的不断进步,尤其是在移动芯片GPU性能的提升下,玩家对于3D移动游戏的需求日益增长。根据Wikipedia的数据,2014年中国有超过12亿的移动设备用户,几乎是美国的四倍。随着英特尔处理器在中国的市场份额增长,开发者们迫切需要了解如何将基于Unity的游戏适配到基于英特尔架构的Android手机/平板上,这是一个独特且快速增长的市场,其中应用的分发和销售并不依赖于Google Play。中国有一些特殊情况,要求游戏开发者在开发和移植游戏时采取特定的措施,本文将对此进行讨论。
如果Unity游戏没有使用任何插件,那么将基于ARM的游戏移植到英特尔架构是非常简单的。将展示如何进行这一过程。首先,下载Unity 4.6或更高版本。然后使用Unity打开游戏项目。在文件菜单中选择“构建设置”,将看到下面的窗口。
在选择了Android并点击“玩家设置”按钮后,将显示如下的配置窗口。确保设备筛选选项为FAT或x86,然后构建项目。将得到一个支持x86原生的APK。
然而,还没有完成。移动游戏比这更复杂,因为它们包含第三方插件来执行各种任务。
大多数Unity游戏使用插件来提供增值服务。在中国,插件往往是以下列出的类型:
插件类型及评论:
每个插件的更完整描述如下。
许多独立软件供应商(ISV)专注于游戏开发中的收入收集。实现这一目标的有效方式是应用内购买,这需要一个支付插件。在中国有许多支付供应商,如支付宝、财通和微信支付等。此外,电信运营商如中国移动、中国联通和中国电信也有为ISV提供的支付插件。
大多数Android平台的游戏代码是用Java编写的,编译成DEX文件。这个文件是反编译攻击的容易目标。因此,需要安全保护。极密、360、邦邦和纳加都是中国市场上的主要安全供应商。
Android的软件调试通常包括检查日志、设置断点和逐步观察运行参数。当发生崩溃时,更有效的方法是转储崩溃信息,尤其是在应用程序发布后。这些信息包括平台寄存器和调用栈。一些ISV将异常处理程序与游戏结合使用,以跟踪日志信息。例如,中国ISV腾讯开发了一个名为Bugly的SDK,它集成了腾讯的所有应用程序和游戏异常。
像应用内购买一样,游戏内集成的广告是游戏开发者获得收入的另一种商业模式。
许多游戏,尤其是在线游戏,希望玩家拥有账户,以便在后端服务器记录他们的进度并存储分数。因此,像QQ和微信这样的流行中国账户系统已经被嵌入到游戏中。
数据统计SDK记录游戏玩家的统计数据,开发者随后可以使用这些数据来优化和修改游戏。
这个SDK从服务器向用户发送通知。
当启用Android游戏的x86原生支持时,所有相关的SDK必须先移植到x86,然后才能插入Unity;否则,游戏将无法在基于英特尔架构的平台上良好运行。
We Fire是腾讯光速工作室推出的第一款3D第一人称射击手机游戏。它拥有超过1.37亿注册用户和每月2600万活跃用户;它是中国目前最受欢迎的手机游戏之一。
ARM版本的We Fire在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版本进行了一些性能比较。结果如下。
移植后,平均功耗比通过原生桥运行时提高了约10%。CPU和RAM利用率分别降低了26%和21%。
此外,Fat(ARM+x86)的APK大小仅比ARM版本多9MB。
We Fire APK大小
在性能测试中使用的软件和工作负载可能已经针对英特尔微处理器进行了优化。SYSmark*和MobileMark*等性能测试是使用特定的计算机系统、组件、软件、操作和功能进行测量的。任何这些因素的变化都可能导致结果变化。应该咨询其他信息和性能测试,以帮助全面评估考虑的购买,包括该产品与其他产品组合时的性能。配置:[描述配置+使用什么测试+谁进行测试]。更多信息请访问http://www.intel.com/performance。