- 用户指南
- 资源商店 (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) 部署
- 使用网络播放器中的信任链系统
网络播放器流处理
网络播放器流处理 (Web Player Streaming) 对于为终端用户提供 出色的游戏体验来说至关重要。网络游戏背后的理念是用户几乎可马上查看内容,尽快开始玩游戏,而不是长时间等进度条。这点很容易实现,说明如下。
门户优化
该部分将重点讲述向在线游戏门户发布游戏的内容。流对所有内容都有用,可轻松应用到许多其他情况。
在线游戏门户希望一些形式的游戏可以真正从下载完 1MB 数据后开始。如果无法做到,门户接受游戏内容的可能性会大大降低。从用户的角度看,游戏须尽快开始。否则就是在浪费他的时间,他还有可能关闭窗口。
在 128KB 的网线速率下,每秒可下载 16KB 或每分钟下载 1MB。这是在线门户的低端宽带目标。
游戏会优化设置为流,如:
- 50 KB 显示徽标和菜单(4 秒)
- 320 KB 供用户玩一个小教程关卡或进行菜单中的一些有趣互动(20 秒)
- 800 KB 让用户玩第一个小关卡(50 秒)
- 完成下载整个游戏的 1-5 MB(1-5 分钟)
要注意的关键点在于考虑网速较慢的用户的等待时间。永远不要让用户等。
如果目前的网络播放器为 10 MB,那么也不要惊慌。看起来优化的难度很大,实际上只要少许努力,通常很容易就可以让游戏具有这种结构。将以上每个步骤看作一个单独的场景。如果游戏制作完成,就已经做完了最难的部分。根据该加载理念,构建一些场景轻而易举!
如果打开控制台日志(打开编辑器日志 (Open Editor Log) 按钮位于控制台 (Console) 窗口(桌面平台 (Desktop Platforms)));构建后或构建期间点击帮助 (Help) -> 打开编辑器控制台日志 (Open Editor console log) 菜单 OSX),可看到每个单独场景文件的大小。控制台会显示类似下文的内容:
***Player size statistics*** Level 0 'Main Menu' uses 95.0 KB compressed. Level 1 'Character Builder' uses 111.5 KB compressed. Level 2 'Level 1' uses 592.0 KB compressed. Level 3 'Level 2' uses 2.2 MB compressed. Level 4 'Level 3' uses 2.3 MB compressed. Total compressed size 5.3 MB. Total decompressed size 9.9 MB.
该游戏可以使用更多优化!如需更多信息,建议阅读降低文件大小页面
最重要的步骤
- 首先加载菜单。显示动画徽标是一种不错的办法,不知不觉时间就已过去,让下载过程继续进行。
- 第一个关卡尽量短,不使用过多的资源。这样,第一个关卡就可以快速加载,让玩家玩一到两分钟,确保所有剩余资源在后台下载完成。何不加一个迷你教程关卡,让用户学习游戏的玩法呢?此时不必放入高分辨率纹理或大量对象,或第一个关卡就出现所有敌人。使用最少的多边形数。这意味着设计游戏时必须考虑网络播放器体验。
- 游戏开始时没必要出现所有音乐。将音乐外部化并通过 WWW 类进行加载。Unity 使用高质量编解码器 Ogg Vorbis 来压缩音频。可是即使经过压缩,音频依然会占用很大空间。如果音乐有 5 分钟,要压缩到 3 MB 完全是不可能的。必须有所牺牲。加载一段非常短的音轨,循环播放,直至更多音乐下载下来。当玩家沉迷于第一个关卡时才能加载更多音乐。
- 使用导入设置 (Import Settings) 来优化纹理。将音乐外部化后,纹理将轻松占用游戏的 90%。典型的纹理对网络部署来说太大。在小浏览器窗口中,有时大纹理一点也不会提高视觉保真度。确保纹理和实际需要的一样大(此时要准备好作出更大牺牲)。将纹理分辨率减半,实际上使纹理只有原来的四分之一大。当然,所有纹理应经过 DXT 压缩。
- 通常会降低网络播放器的尺寸。有个手册页面专门列出了 Unity 提供 的优化文件大小的工具,此处。虽然 Unity 使用基于 LZMA 的前沿压缩工具,一般可将游戏数据压缩到未压缩数据的一半或三分之一不等,但是您需要尝试一切可能。
- 尽量避免使用 Resources.Load。虽然 Resources.Load 非常方便,但是使用 Resources.Load 时如果是第一次使用资源,Unity 无法对其进行排序,因为任何脚本都可能试图加载该资源。可通过第一个带资源的流关卡 (First Streamed Level With Resources) 属性,在编辑 (Edit)->工程设置 (Project Settings)->播放器 (Player) 中设置哪道关卡将包括可通过 Resources.Load 加载的所有资源。很明显,您希望尽量拖延将 Resources.Load 资源移到游戏中的时间,或根本不使用该功能。
发布流网络播放器
Unity 中的流基于关卡,由一个简单的工作流程来进行设置。Unity 在内部执行跟踪资源并在压缩数据文件中以最佳方式组织起来、根据在第一个场景中使用的顺序排列等所有辛苦工作。用户只需确保构建设置 (Build Settings) 中的第一个关卡使用尽可能少的资源。这自然是针对“菜单关卡 (menu level)”。为了获得较佳的网络体验,需要确保玩家要玩的第一个真正游戏关卡也很小。
为了在 Unity 中使用流,请在构建设置 (Build Settings) 中选择网络播放器流 (Web Player Streamed)。之后,第一个关卡使用的所有资源一旦加载完成,内容将自动开始。尝试将“菜单关卡 (menu level)” 的大小保持在 50-100 KB。流会继续快速加载,同时解压。构建期间/之后,查看控制台可看到大小。
可以按关卡查看流的进度,关卡激活时将进行加载。使用 GetStreamProgressForLevel 显示进度条,使用 CanStreamedLevelBeLoaded 检查是否所有数据可加载到特定关卡。
当然,流的形式是线形的,在大部分情况下与游戏的工作方式相匹配。有时,这样还不够。Unity 还提供 API,以便使用 WWW 类手动加载 .unity3d 文件。视频和音频也可以进行流式处理,几乎可立即开始播放,无需先要求下载影片。最后,就像游戏可能依赖的任何纹理或二进制数据一样,纹理可通过 WWW 类轻松下载。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论