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/m.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燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP