UDN
Search public documentation:

UnrealOnMobileCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3主页 > 移动设备主页>虚幻引擎3: 移动设备概述

虚幻引擎 3:移动设备概述


概述


使用虚幻引擎3开发针对移动设备平台的游戏需要对游戏设计及创建的某些方面进行修改,以适应移动设备构成要素固有的规则、优势及限制。本文提供了当开发针对移动设备平台游戏时需要考虑的某些功能及注意事项的概述。

移动设备平台


Apple iOS

尽管所有移动设备平台共享类似的构成要素,从而它们具有类似的优势及限制,开发针对Apple的iOS 平台的游戏有 其自己的复杂性及特殊性。要想开发iOS游戏并将其发布到App Store中,还有一些特殊的硬件和软件需求。

关于创建针对Apple的iOS平台的游戏的详细信息,请参照虚幻引擎3: Apple iOS概述 页面。

Android

关于创建针对Tegra设备的游戏的详细信息,请参照虚幻引擎3: Android概述 页面。

  • 我们为完整的UE3源码授权用户提供了Android支持。如果您正在开发一款UDK游戏,但为了针对额外的目标平台,您正在探索从使用UDK转移到使用UE3,那么请联系Epic的销售团队来讨论我们的颇竞争力的条款及授权事项。

入门指南


关于设置您的开发环境包括软件及硬件需求来编译针对移动设备游戏、及部署及调试在移动设备上运行的Unreal项目的一般流程的信息,可以在入门指南: 开发移动设备项目页面找到。

移动设备上的动态载入


移动设备上支持异步关卡动态载入。请参照这个页面获得贴图动态载入的当前状态。

新的输入子系统


请参照这个页面来获得关于实现multi-touch(多点输入触摸屏)和tilt(倾斜)支持所需要的全新的输入系统的更多信息。

移动设备的系统设置


对于给定平台来说,移动设备和其他平台是非常不同的。有一个单独的Xbox360,但是有5个(正在统计)iOS设备可以运行由UE3驱动的应用程序。就这点而论,.ini文件驱动的SystemSettings(系统设置)概念已经不再适合。它仍然是由.ini文件驱动的,但是在您的Engine.ini文件中有多个部分,并且会为正在使用的设备使用适当的部分。另外,可以重定向移动设备预览器来使用特定设备的设置,以便您可以非常快地看到您的修改的效果。

BaseEngine.ini文件包含了针对iOS设备的所有游戏的默认值。您的游戏的DefaultEngine.ini文件可以正常地覆盖这些值。在BaseEngine.ini中,比如[SystemSettingsIPhone3GS]部分,您可以看到SystemSettings(系统设置)现在有一个"BasedOn"标签。这会创建一个层次化的设置,以便您很容易地把设置修改应用到您的游戏的所有设备上,然后仅覆盖每个平台的特定设置。

目前,除了iPhone4(它具有两倍的内存)之外的所有平台具有的都是简化的贴图大小,请使用[SystemSettingsMobileTextureBias]部分。

有很多针对移动平台的系统设置。请参照该页面获得关于移动设备系统设置的指南。

帧频率


在Epic Citadel中,我们一般情况下的目标分辨率是30fps。尽管以60fps运行是可能的,但您必须在内容上进行妥协。有一个 Engine.ini值用于控制最大帧频率:

[Engine.SeekFree]
MaxSmoothedFrameRate=35
bSmoothFrameRate=TRUE

要想获得60fps的帧频率,需要将 MaxSmoothedFrameRate 改为62。您也可以禁用 bSmoothFrameRate 项,从而让它以尽可能快的速率运行,但是我们不推荐这样做,因为帧频率可能您会在不同帧频率之间跳跃(20、40、20、40等),这将使得效果看上去很糟糕。

在移动设备上保存数据


目前有3种方法来在移动设备上保存 数据/游戏状态。

BasicSaveObject()

在Engine类中有一个静态的脚本可以访问的native函数,它可以用于保存对象(以及它的属性)。您一般需要创建其中一个单独的对象来存储您的所有设置,然后保存该对象,如下所示:

   MyObject = new SomeClass;
   MyObject.Value = 5;
   class'Engine'.static.BasicSaveObject(MyObject, "SaveGame.bin", true, 1);

MyObject 是一个要保存的对象变量。="SaveGame.bin"= 是要保存的文件的名称。=true= 指出将会把FILEWRITE_SaveGame传给CreateFileWriter(对于iOS系统,这项必须true,以便可以在稍后加载文件)。=1= 是针对游戏的版本号,可以用于判断不加载较旧版本的文件。

要想在稍后加载对象(要想加载保存的游戏等),您需要做一些和保存过程非常类似的处理:

   MyObject = new SomeClass;
   class'Engine'.static.BasicLoadObject(MyObject, "SaveGame.bin", true, 1);

这个处理之后,现在MyObject.Value的值是5。

注意,仅会保存基本属性(整型、浮点型、字符串、名称等)及基本属性的 数组/结构体。您可以保存一个对象指针,但是当加载时,对象必须已经在内存中(它在对象的路径名称上使用StaticFindObject,因为对象属性是作为字符串存储的)。

控制台命令

[目前该方法仅在iOS上有效]

您也可以在Kismet或脚本代码中通过控制台命令手动地保存(及加载)一个单独的值。

   mobile SaveSetting <SettingName> <Value>
   mobile LoadSetting <SettingName> <DefaultValue>

通过使用这种方法,将会把所有设置作为字符串进行保存及加载。有运行控制台命令的代码来做任何必要的字符串类型转换。当加载时,如果还没有设置该设置,那么您可以指定将要返回的默认值:

  local int SavedValue, LoadedValue;
  SavedValue = 10;
  ConsoleCommmand("mobile SaveSetting TestSetting " $ SavedValue);
  LoadedValue = int(ConsoleCommand("mobile LoadSetting TestSetting 1"));

Kismet动作

请参照移动设备Kismet参考指南获得关于 Save/Load Values(保存/加载 值)Kismet动作的更多信息。

移动设备音频


请参照这个页面来获得关于音效及音乐方面的信息。

移动设备贴图


请参照这个页面获得关于在移动平台上处理贴图的信息。

移动设备材质


请参照这个页面获得关于创建及修改移动平台的材质的更多信息。

启动时编译材质

关卡中应用的材质会对游戏的启动时间产生巨大的影响。着色器不能进行离线编译,所以必须在游戏中编译它们。因为这会花费一些时间(可能会在游戏性过程中导致停顿),所以引擎将会在启动过程中编译尽可能多的着色器(正如烘焙器所决定的)。根据您的关卡中使用的各种材质移动设备组合的不同,在启动时所要编译的着色器的数量可能变得很多(因此编译起来很慢)。

烘焙器可以预先确定的着色器(一般占总着色器的95%多)将被进行预处理为最佳格式,以便加快编译速度。如果有一个需要渲染的着色器但烘焙器没有检测到它,那么将会在第一次使用它时编译它(可能会产生小量停顿)。

注意,两个相同的材质,只是所具有的贴图不同,那么不会导致编译两个着色器,将仅编译一个,因为设置是一样的。


雾是基于每个 关卡/地图 进行控制的。雾体积不能使用。请参照这部分获得关于设置雾的更多信息。

网络文件加载器


移动设备架构为移动设备引入了一个跨平台网络文件加载系统。

它大大地加速了内容迭代速度(以及命令行修改)。一旦激活,所有的用户必须退出游戏,重新运行游戏,它将会把新的文件复制到设备中。

如何使用

要想使用它,您需要使用UnrealFrontend:

  • 运行Unreal Frontend
  • 跳转到Game(游戏)标签
  • 确保"Use Networked File Loader(使用网络文件加载器)" 设置为true。
  • 执行一次Sync(同步)。
    • 这将会把文件放到具有运行UFE的机器的IP地址的应用程序中。
  • 在设备上引导游戏。
  • 这将会通过网络把游戏复制到手机上。
  • 通过网络复制不是非常的快,但是Sync/install(同步/安装)时间很快。
  • 如果您修改内容:
    • 正常烘焙游戏。
    • 退出游戏。
    • 运行iPhone游戏(不需要触摸iTunes)。
    • 新更新的文件将会复制过来。
  • 如果您仅改变了游戏的命令行:
    • 跳转到Game(游戏)标签。
    • 点击"Make Commandline(制作命令行)" 按钮。
    • 退出游戏。
    • 它运行游戏。
    • 将会应用新的命令行。

重要注意事项

重新编译代码

如果您重新编译代码,您将需要点击Sync(同步)按钮来打包可执行文件。

要想使它能正常工作您必须保持UnrealFrontend处于运行状态。UFE是一个文件服务主机应用程序。

以后,这可能会变为一个服务或其他东西,但暂时,需要UFE。

切换回正常文件加载

如果您想停止使用网络加载器,那么您可以取消选中”Use Networked File Loader(使用网络文件加载器)"复选框,然后像之前那样同步。

然而,您必须手动地从手机中完全地删除应用程序,来清除前一次运行的缓冲文件。

  • 这个问题以后将会在代码中进行修复 (如果没有使用文件加载器,那么应用程序可以删除缓冲文件)。

基本工作流程


编译

调试

在移动设备预览器中,您可以使用使用小键盘的1和3键来逐步调试特定场景中的调用函数,来尝试找到并隔离问题。然后可以使用小键盘的0键重置该调试模式,将场景返回到正常状态。

预览

移动设备预览器是快速预览您的游戏的最佳选择,不必将游戏烘焙或同步到设备上。

注意,很多使用移动设备开关创建的阴影效果,比如移动设备雾、移动设备高光及材质,将不会在编辑器中显示。这是因为编辑器使用Direct3D,而移动设备使用OpenGL ES2并且需要不同的着色器来显示这些效果。