- 用户指南
- 资源商店 (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) 部署
- 使用网络播放器中的信任链系统
优化内置 iOS 播放器的大小
减少播放器大小的两种主要方式是更改 Xcode 中的活动生成配置 (Active Build Configuration) 以及更改 Unity 的剥离级别 (Stripping Level)
在发布模式下构建
您可以在 Xcode 活动生成配置 (Active Build Configuration) 下拉菜单中选择调试 (Debug) 和发布 (Release) 之间的一项操作。根据游戏自身的大小,选择发布 (Release) 模式生成的播放器将比调试 (Debug) 小 2-3MB。
活动生成配置 (Active Build Configuration) 下拉菜单
在发布 (Release) 模式下,播放器会去掉任何的调试信息进行构建,所以如果您的游戏崩溃或有其他问题,将没有可用的、可输出的堆栈跟踪信息。这适合部署已完成的游戏,但在开发期间您可能更希望使用调试模式。
iOS 剥离级别 (Stripping Level)(高级版许可功能)
剥离机制可通过以下几种方式激活尺寸优化工作:
- 剥离程序集级别:通过分析脚本的字节码,来将这些脚本没有引用的类和类函数从 Dll 中删除,从而使其不进入 AOT 编译阶段。这种优化减少了主要的二进制以及对应 Dll 的大小。在不使用反射的条件下,这种优化安全可靠。
- 剥离字节码级别:任何 .NET DLL(储存在数据 (Data) 文件夹中)仅从元数据中被剥离出来。这种可能性主要是因为所有的代码都已经在 AOT 阶段被预编译并链接到主要的二进制文件中。
- 使用 micro mscorlib 级别:使用一种特殊的、较小的 mscorlib 版本。某些组件将从库中删除,例如,安全、Reflection.Emit、远程处理、非公历日历等。同时,内部组件之间的相互依赖性也会降至最低。这项优化降低了主要的二进制和 mscorlib.dll 尺寸,但是,它与某些系统及 System.Xml 程序集类不兼容,所以必须谨慎使用。
这些级别可以累积,因此,级别 3 优化隐式地包含了级别 2 和级别 1,级别 2 优化包含级别 1。
请注意: Micro mscorlib 是核心库的最低级版本,它只保留了 Unity Mono 运行时间必要的项目。使用 micro mscorlib 的最佳做法是不要使用应用程序不需要的任何 .NET 类或其他功能。GUID 就是一个应该省略的例子;它们可以轻松地被自定义的伪 GUID 所替代,这样做将产生更好的性能和更小的应用程序。
提示
如何使用反射处理剥离
剥离很大程度上取决于静态代码分析,如果使用反射等动态功能,有时候将不能有效使用剥离。在这些情况下,有必要给出一些提示指出哪些类是不应该触动的。Unity 为每个工程都建立了自定义剥离文件夹黑名单。使用黑名单是创建 link.xml 文件并将它放入资源 (Assets)文件夹的一个简单方法。以下是 link.xml 文件的内容示例。标记为预留的类将不受剥离影响:-
<linker> <assembly fullname="System.Web.Services"> <type fullname="System.Web.Services.Protocols.SoapTypeStubInfo" preserve="all"/> <type fullname="System.Web.Services.Configuration.WebServicesConfigurationSectionHandler" preserve="all"/> </assembly> <assembly fullname="System"> <type fullname="System.Net.Configuration.WebRequestModuleHandler" preserve="all"/> <type fullname="System.Net.HttpRequestCreator" preserve="all"/> <type fullname="System.Net.FileWebRequestCreator" preserve="all"/> </assembly> </linker>
请注意: 有时候可能难以确定哪些类会被进行错误的剥离,而应用程序可能需要这些类。您可以在模拟器上运行剥离应用程序,检查 Xcode 控制台中的错误信息,从而获取有用的信息。
下面是如何让发布版本尽可能的小的简单清单。
- 最小化资源:启用 PVRTC 纹理压缩,尽可能降低其分辨率。同时,尽量减少未压缩的音频数量。点击此处,查看更多减少文件大小的提示。
- 设置 iOS 剥离级别为使用 micro mscorlib。
- 设置脚本调用优化级别为快速但不支持异常 (Fast but no exceptions)。
- 切勿让代码与 System.dll 或 System.Xml.dll 产生任何关联,这些库不 与 micro mscorlib 兼容。
- 删除不必要的代码依赖性。
- 设置 API 兼容级别为 .Net 2.0 子集。请注意,.Net 2.0 子集与其他库的兼容性非常有限。
- 设置目标平台 (Target Platform) 为 armv6 (OpenGL ES1.1)。
- 切勿使用 JS 数组。
- 避免泛型容器与结构等数值类型相结合。
我可以使用 Unity 构建小于 20Mb 的应用程序吗?
可以,如果所有大小优化被都关掉,一个空项目在 AppStore 中大小大致为 13 MB左右。这为游戏提供 了大约 7MB 的压缩资源预算。如果您拥有高级许可证(并因此可以访问剥离选项),那么只含有主相机的空场景在 AppStore 中可压缩到大约 6 MB(zipped 和 DRM 连接),这样,您就可以有大约 14 MB 的可用空间用于压缩资源。
为什么我的应用程序发布到 AppStore 之后,大小有所增加?
在发布您的应用程序时,Apple 将首先加密二进制文件,然后通过 zip 压缩。大部分情况下,Apple 的 DRM 将增加约 4MB 的二进制大小。一般说来,您应该预计文件最终大小约等于所有文件(可执行文件除外)的 zip 压缩存档,再加上未压缩的可执行文件的大小。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论