GameDesign 板


LINE

於前阵子举办的 Unite 2015 Tokyo 大会上 SQUARE ENIX 社的 Leader Programer 滨口直树 向开发者分享了使用 Unity 5 开发手机游戏 "MOBIUS FINAL FANTASY" 遇到的问题和处理方式 参考资料: 巴哈报导: http://gnn.gamer.com.tw/2/113632.html 简报PDF: http://tinyurl.com/mjvqadl 鲁蛇小弟我用 google 翻译 将相关的内容尽量翻成中文了 虽然里面有一堆翻译错误 还是希望能分享给各位大大 (可搭配参考上面的参考资料) //============================= // 1. 在 Unity 上开发规模较大游戏时的心得 //============================= * 开发规模较小和较大的游戏,有什麽地方是完全不同? 同个档案会同时被更多人修改到 * 多人同时编辑的范例 以一个攻击动画的时间轴为例子 和下个 motion 的 blend motion section 击中判定 plan 跳跃时的音效 sound section 余光特效 (trigger) effect section * Unity 不适合多人同时编辑档案 没办法同时让多人修改 *.scene 和 *.prefab 档 * 为了在 Unity 上实现多人编辑所作的事 可以在 Inspector 上建立 Asset 之间的关联 (每个 section 拆成各自的 prefab, 再用一个 array 存他们的 reference 避免大家一起变成同一份prefab ?) * 藉由 Hook Server 来更新定义相依关系的 prefab Motion Plan > 版本管理 > Hook Effect 工具 < Server Sound 有人送交资料上去後, 版本管理工具会让 Hook Server 更新 attack.prefab Hook Server 会处理他们之间的依赖关系 并自动送交最新的 attack.prefab 资料 因为 Unity 档案的参考 以 meta 档里面的 guid 作为依据 是故即使不用 UnityEditor, 靠自制工具建构 prefab 资料也不会太难 (在google上打 "hook + svn" 之类的 就会看到相关文章了) * 在 Hierarchy 上的可读性较低的问题 结果还是自己写了 editor tool 除了需以一览方式确认各人负责的 prefab 内容 也为了大幅改善制作效率 放弃了在 Hierarchy 和 Inspector 上设定内容 而用专门的 Timeline tool 来开发 在 C# 参考设定加入 UnityEditor.dll 然後就可以用 UnityEditor.AssetDatabase 对 Asset 作读写的动作了 (这段不太确定XD) * MOBIUS 的开发环境 略 * MOBIUS 的资料确认流程 各人负责的 prefab v v 送交 v 版本控制工具 v v 通知 Hook Server v Hook Server v v 处理依赖关系的 prefab v 更新後的内容会送交回去 v 版本控制工具 v v 一定时间後会收集相关资料 v 交由另外的 Server 去编译 AssetBundle v AssetBundle Build Server v v 以 console 模式启动 UnityEditor v 编译 MOBIUS 的内容约需 3 小时 v 完毕後就会上传到 v Game Server 的储存空间 v Game Server v v 下载资料後, v 就可以开始游戏了 v Android & iOS //============================= // 2. 在手机平台上开发高品质游戏的心得 //============================= * Unity 慢吞吞的原因 需了解 C# (Mono 2.0) 的特性 分配 heap 记忆体会增加 GC 的频率 struct -> stack memory class -> heap memory 注意字串处理 class 和 enum 的 toString() 效能不好 foreach 会在 heap memory 生成 enumerator 增加 GC 的频率 认真处理向量运算时 效能会很吃紧 在适当的地方考虑用 native code 在 Assets/Plugin 放 dll 就可以简单呼叫 native code elif UNITY_ANDROID [DllImport("libNativePlugin")] private static extern void updatePhysicsBone(IntPtr data, float delta); elif UNITY_IPHONE [DllImport("__Internal")] private static extern void updatePhysicsBone(IntPtr data, float delta); endif 两者之间的资料传递用 Marshal.AllocGlobal(size) 用 C# coding 还是比较简单 考虑使用的时机用不同方案处理 开发效率才会高 (MOBIUS 在 IK 和物理晃动上使用) * 先了解敌人在哪里 APP 使用的 Memory 量 iOS: 350 ~ 600 MB Andriod: 400 ~ 1100 MB 相比 Andriod 高端机种搭载 2 ~ 3 GB 的记忆体 iPhone 高端机只有 1 GB Andriod 和 iPhone 在记忆体管理上完全不同 Andriod app 以 Java 运作 一般都会预留较多记忆体以防止 GC 发生 不过因为 Unity 是用 Mono 的缘故 所以 iOS 也必须担心 GC 的问题...? 因为在同等规格下 iOS 比 Andriod 的效能更好 如果 APP 在两个平台都想推出, 先开发 Andriod 比较不会出问题 * 接下来要考虑 download size 最近在家机平台上FF系列的容量 FFXV 体验版: 5 GB LRFF: 10 GB 第一次执行所需的下载资料量 (实际产品可能会不同) ================================ iOS Andriod ================================ Package 70 MB 40 MB ================================ first DL 350 MB 500 MB (低) (品质可选) 700 MB 1 GB (高) ================================ 为了缩减资料量, 使用压缩版的 AssetBundle * 贴图格式会影响资料大小 iOS Andriod =================== 不透明贴图 RGB PVRTC RGB ETC 透明贴图 RGBA PVRTC RGBA ETC2 部分 Andriod GPU 不支援 ETC2 考虑到该类 GPU 需载入 含 alpha 通道的贴图时 也有人直接用 RGBA 16 bit 考虑一张 2048x2048 的贴图 PVRTC 4bit 2 MB ETC2 8bit 4 MB RGBA 16bit 8 MB RGBA 32bit 16 MB (有 mipmap 的话再乘 1.33) 可知贴图格式对容量影响非常大 * 针对不同的 GPU 选择最适合的贴图格式 不同 GPU 有各自适合的贴图格式 (吃不了的好像就变RGBA了) =============================== PowerVR RGB PVRTC 4bit RGBA PVRTC 4bit =============================== Adreno RGB ATC 4bit RGBA ATC 8bit =============================== Mali RGB ETC 4bit RGBA 32bit (size减半) =============================== Mali RGB ASTC 6x6 (3.6bpp) (T600後) RGBA ASTC 4x4 (8bpp) =============================== Tegra DXT1 (4bpp) DXT5 (8bpp) =============================== 使用正确的贴图格式可以 减少显示记忆体的损耗 加快载入速度 较少程度的画质劣化 判断使用的机型时: SystemInfo.deviceModel UnityEngine.iOS.Device.generation * 但设计人员只想管理一份资料 管理多份贴图很麻烦... 想针对每个 GPU 输出适合的贴图 又不想管理一堆贴图资料 * 虽然 Unity 可以指定输出的贴图格式... 贴图设定上只有一个选择格式的栏位 iOS 可以直接选 PVRTC 没问题 但 Andriod 没办法一次产出各种格式的贴图 * 藉由 Asset Bundle Build Server 来处理 为了制作适合各种 GPU 的 AssetBundle 准备 10 台以上的 Build Server 每台 Server 分别且持续的 制作对应各种贴图格式的 AssetBundle 如果在 Unity 里修改 Texture2D 的 TextureFormat 会导致贴图的快取资料需要重建 在 Unity 要制作 AssetBundle 之前 先用自己写的 Script, 将图片档案的 meta 档里的, textureFormat 等数值换掉, 再呼叫 Unity 直接编译 AssetBundle 这样在 Build Server 这边 就可以省掉建立快取资料的时间 提升 AssetBundle 的生成速度 * 让 Shader 在一开始就编译好 因为目标平台的 GPU 版本不同 没办法事先在 AssetBundle 编译 Shader 资料 应用程式读到 Shader 资料时 会立刻编译,但这时会花很多时间 先将会用到的 Shader 集中起来 一开始就载入这个 AssetBundle 之後让其他 AssetBundle 依赖它 就可以省下每次都要编译的问题 ( 可参考: http://tinyurl.com/mr7l3jb ) //============================= 游戏影片: https://youtu.be/0GlVAlyNi0I
--



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.12.151
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1429498959.A.4BA.html
1F:推 dreamnook: 实用! 04/20 11:44
2F:推 laikyo: 受益良多 04/20 13:09
3F:推 gn00671975: 推 04/20 13:52







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP