【TGDF2021】遊戲線上內容的管理與交付(Unity)

講者:Arturo Nereu

演講影片

本議程較偏 Demo,使用 Unity,以手遊為例。
使用 Unity 的 Addressable Asset System 來管理素材;
使用 Unity 的雲端內容交付系統(Cloud Content Delivery,CCD)來推送遊戲內容給玩家們。

講者介紹

為什麼需要管理素材?

  • editor 允許我們把所有素材放進去了
  • 然而現在的遊戲越來越複雜 -> 素材量增加
  • 提供更好的玩家體驗,因此需進行素材管理
    • e.g. 日後更新,只需透過雲端安裝即可
  • 本議程以手遊做示範,當然也可適用於 PC / Console
    • 只是方式與今天介紹的較為不同,不過想法上是相同的

Unity Cloud Content Delivery (CCD)

官網
官方文件

  • 此 Unity 服務支援「跨引擎」,但針對 unity 有較好的整合
  • 後端有強大的內容傳遞網路 (Content Delivery Network,CDN) 支援

How it works?

  1. 將執行檔和遊戲資源分開
    • 執行檔上傳至遊戲商店
    • 遊戲資源上傳至 CCD
  2. 遊戲發行後,獲得某資源的玩家會自行從 CCD 下載
    • 只將內容傳遞給需要的使用者

Concept

  • Bucket (儲存桶)
    • Container of Asset
    • 儲存資料的最大單位
    • 可以擁有多個 Bucket
      • 可依環境區分。e.g. 測試版與正式版
  • Entry
    • 相當於在 Bucket 內的檔案
  • Release
    • 一個 Bucket 內的 Entry 的快照 (snapshot),可以做為版本釋出
  • Badge
    • 用來標註 Release 用,用戶端的 App 可以透過 Badge 來下載特定 Release
    • 一個 Release 只能指派一個 Badge
  • The promotion process(推進流程)

Unity Addressable Asset System

  • 可以從 Package Manager 安裝套件
    • Window -> Package Manager,確認 Addressable 是否安裝
    • 安裝完後在Window -> Asset Management內會看到 Addressable 選項
  • 用單一網址去存取資源,可以設定是要從本地或者其他網址存取
  • 可以將不必在執行時就需要的資源先分裝在外部伺服器,需要時再載入
  • 可以對不同種類資源做分組
  • 協助管理資源相依性問題,比如打包一個場景,他會把場景需要的素材也打包進去
  • 要把資源加入到 Addressable,可以拖曳到視窗內,或者在 inspector 上勾選 Addressable
  • Addressable 主要是使用非同步方式進行載入或下載
    • 非同步:如果想載入一個場景,當開始載入場景時,若場景不存在,會嘗試下載,但遊戲接下來的畫面更新仍可正常執行,直到場景載入完成並出現。
    • 同步:如果想載入一個場景,需等到所有內容都載入完畢才能繼續。
  • Addressable.AsyncOperationHandle 來監聽 addressable 作業完成的事件

Cloud Content Delivery

  • 前往 Unity Dashboard
  • 先在 Dashboard 建立專案
  • 展開左上角的圖示 -> Cloud Content Delivery -> Project -> 選擇專案,然後點左邊的 Onboarding 就會引導所有流程
  • 創建好 Bucket 後就可以拿到 Addressables remote path,在 Unity 設定貼上後就可以開始用
  • 接著在 Addressables -> Group 裡做 build,就會產生對應平台的 Asset Bundles,產生的就上傳到 Bucket
  • 增加 Release 與 Badge 後就可以回到 Unity 測試
  • 可以再 Addressables -> Group 中,修改執行模式成 Existing Builds,就會實際使用到雲端上的資料