《魔獸世界》

工程師工坊:魔獸好戰友應用程式的設計過程

工程師工坊:魔獸好戰友應用程式的設計過程

魔獸好戰友應用程式在《暗影之境》中所做出最大的技術革新之一,便是能夠同時支援多個資料片的新功能。我們知道許多玩家都一直期盼能夠有這樣的功能,今天我們想要來跟大家分享,在製作這種大規模技術革新的過程中所遭遇到的種種挑戰與抉擇。

前情提要

魔獸好戰友應用程式原本是設計成只有支援一部資料片,也就是《軍臨天下》。在《決戰艾澤拉斯》推出時,我們決定先處理幾個重大的後端改善項目,包括要讓應用程式能夠跟 PC 版客戶端分享程式碼;如此一來,魔獸好戰友應用程式就可以利用主遊戲使用者介面當中的許多功能與工具,這是原本所做不到的。但是這麼做的代價是,我們無法建立出適當的架構來同時支援一部以上的資料片,所以我們決定把魔獸好戰友應用程式所支援的資料片從《軍臨天下》改成當時最新的資料片《決戰艾澤拉斯》。

在做出這樣的調整之後,魔獸好戰友應用程式無法再使用《軍臨天下》的遊戲內容,許多玩家因此大感失望,因此我們決定要在《暗影之境》推出之後,讓魔獸好戰友應用程式能夠同時支援不只一部資料片。此外,負責處理手機版事務的遊戲團隊也很希望能夠滿足玩家們的期待,並讓《軍臨天下》的遊戲內容回歸。

在經過簡短的討論之後,我們原本決定只恢復以往資料片的其中幾個功能,然後把主要心力投注在《暗影之境》的遊戲內容上;但緊接著我們又改變心意,決定要盡可能恢復以往資料片的各個功能。我們也知道在《暗影之境》推出之後,玩家可以透過時光漫遊戰役 (暫譯) 的功能在《軍臨天下》中升級分身角色,因此我們才會希望玩家能夠在升級的過程中,享受到全面且完整的手機支援功能。

選擇資料片
在《暗影之境》前夕改版發布之後,玩家將能夠在魔獸好戰友應用程式中選擇《軍臨天下》或《決戰艾澤拉斯》,至於《暗影之境》的遊戲內容則會在該部資料片正式上線之後開放使用。

令我們喜出望外的是,《軍臨天下》專屬的程式碼大多數都還留存在魔獸好戰友應用程式當中,而且我們的原始檔案控制也還保留著《軍臨天下》的原版素材,因此我們剛好可以趁此機會重新推出《軍臨天下》的遊戲內容,並測試全新的多重資料片架構。雖然還需要實裝的東西不多,但我們還是得下點苦心,才能把《軍臨天下》和《決戰艾澤拉斯》的遊戲內容妥善地區隔開來。

製作多重資料片架構的過程有三個重點:

  1. 魔獸好戰友應用程式必須先清除掉當前資料片的所有數據,然後向伺服器請求新資料片的數據。
  2. 我們必須把資料片專屬的使用者介面程式碼切割開來,這樣子不同資料片的功能才能各自獨立。
  3. 我們必須把資料片專屬的素材給拆解開來,這樣才能最小化魔獸好戰友應用程式的資源使用率。

資料片數據

起初在開發《軍臨天下》魔獸好戰友應用程式時,大多數負責處理應用程式請求的伺服器程式碼都經過特別設計,只能夠回傳《軍臨天下》的數據。當魔獸好戰友應用程式要改成支援《決戰艾澤拉斯》時,我們就把原本的函數改成會回傳《決戰艾澤拉斯》的數據。不過這次的情況不同,魔獸好戰友應用程式必須要能夠提取任何所選資料片的數據;也就是說,魔獸好戰友應用程式必須要從每個伺服器函數中尋找能夠回應手機請求的函數,並且將函數變更成可以接收指定資料片的參數,以利資料的提取。舉例來說:請求追隨者數據的請求必須要能夠指定追隨者類型(例如:《軍臨天下》追隨者或《決戰艾澤拉斯》追隨者),世界任務的請求則必須包括要提取任務數據的區域。

魔獸好戰友應用程式本身也有許多地方專門針對《決戰艾澤拉斯》的支援功能進行了延伸。在《軍臨天下》中,魔獸好戰友應用程式專門負責請求「職業大廳資源」的相關數據;在《決戰艾澤拉斯》中,我們則只是將「戰爭資源」添加到這則訊息當中。在《暗影之境》中,我們並沒有繼續添加更多的貨幣到同樣的訊息當中,而是選擇把 PC 版客戶端的整個貨幣系統轉移到針對《決戰艾澤拉斯》所開發的程式碼共享新架構當中。也就是說,現在每部資料片都能夠自動請求各自專屬的貨幣類型,不需要再手動指定要請求哪一種貨幣。

在調整貨幣數據查詢功能之前
調整前:魔獸好戰友應用程式會向伺服器請求指定的貨幣數據。
alternate-image-name
調整後:每部資料片都能請求各自的貨幣數據。這個程式碼看起來跟《暗影之境》中採用貨幣系統的插件類似,這是因為魔獸好戰友應用程式擁有程式碼共享架構,可以共享主遊戲的各種功能。

使用者介面程式碼

編寫來支援《決戰艾澤拉斯》資料片的大多數程式碼都是以《軍臨天下》的現有程式碼為基礎繼續進行修改的結果,這使得我們很難去辨認哪些是有實際派上用場的程式碼。舉例來說:《決戰艾澤拉斯》追隨者列表還是能夠顯示武裝,只是武裝按鈕被隱藏起來,所以玩家無法呼叫這個程式碼。《軍臨天下》和《決戰艾澤拉斯》資料片的功能很類似,因此處理這種事情並不困難;但我們知道《暗影之境》會推出新的功能,所以沒辦法再依循以前的模式繼續下去。如果與《軍臨天下》和《決戰艾澤拉斯》共享的程式碼突然必須要支援靈魂之絆和誓盟等功能,只會讓這個原本就已經很複雜的應用程式變得更慘烈。

因此我們決定檢查每個腳本,釐清哪些是共享功能、哪些是資料片專屬功能。我們把資料片專屬的程式碼拆分成子類別或是全新組件,只把共享的基本功能保留在母類別中,並利用這些新的子類別針對各個資料片設計出新的遊戲物件。雖然這些子類別的輔助系統並沒有改變,而且大多數功能也還是共享狀態,但只有《軍臨天下》的任務列表需要擁有戰鬥盟友按鈕;《暗影之境》的冒險列表可以剔除《軍臨天下》和《決戰艾澤拉斯》所採用的雙分頁設計,並顯示出敵人的頭像(而非任務類型的圖示)。

比較《軍臨天下》任務列表和《暗影之境》冒險列表兩者之間的差異
《軍臨天下》任務列表和《暗影之境》冒險列表並列比較兩者差異。

《暗影之境》魔獸好戰友應用程式另一項不為人知的重大幕後改動是,我們製作出了資料庫檔案;魔獸好戰友應用程式現在會採用與 PC 版相同的管線建立自己的資料庫程式碼和資料檔案。這個特點的其中一個好處反映在負責判斷世界任務要顯示於哪張地圖的程式碼上。魔獸好戰友應用程式原本會透過各地圖 ID 的人工邏輯來進行判斷,如果應用程式只需要支援阿古斯和破碎群島這兩個地圖的話,這樣的設計其實並沒有什麼問題。但是在《決戰艾澤拉斯》推出之後,多了許多新的區域,情況也迅速變得棘手了起來。我們決定在《暗影之境》推出之後不要再繼續維護這段程式碼,而是改成直接導入使用者介面地圖的資料庫表單,讓系統能夠變成全面的動態系統,並且把原本用來處理三部資料片區域的超多程式碼轉換成一個簡單的函數,還能夠自動處理世界任務相關的任何請求,不需要使用到任何資料片專屬的邏輯。

素材檔案

手機版和 PC 版開發作業其中一個很大的不同之處在於:手機版使用者可能會透過行動網路使用應用程式,因此會受到檔案大小與連線品質的限制。不論網路連線的品質有多差,我們都必須確保玩家能夠順暢地使用應用程式;為了達到這個目標,我們所採用的其中一個做法是:限制玩家使用應用程式時所需下載的數據。

每部資料片都有許多素材檔案,彼此相加之下檔案大小很快就會突破天際;而且魔獸好戰友應用程式往後不只有《軍臨天下》和《決戰艾澤拉斯》,還會再加上第三部資料片《暗影之境》;也就是說,魔獸好戰友應用程式所需要的數據量會變成三倍。不過,許多素材都只有其中一部資料片會用到,比方說高解析度的世界地圖材質、任務位置背景、追隨者和敵人頭像,所以我們決定把這些素材分門別類,針對各個資料片劃分成不同的集合。如此一來,魔獸好戰友應用程式只需要替記憶體載入當前所選資料片的素材即可,藉此降低魔獸好戰友應用程式所使用的記憶體量。

我們也在開發作業剛起步的時候,就決定要把每部資料片分割成各自的遊戲場景,這樣子每部資料片的功能都能夠以很明確的界線區隔開來。《軍臨天下》的遊戲場景並不需要「誓盟的使命」頁面,至於《暗影之境》的遊戲場景則是不需要「部隊運送」視窗。誠如我們針對程式碼所做的調整,這樣的做法可以幫助我們隨時隨地掌握應用程式的狀況。把素材和遊戲場景像這樣劃分開來,每部資料片就會變成獨立存在的個體,進而降低應用程式的下載檔案大小,減輕使用者的負擔。

我們希望能夠讓玩家自己選擇要在什麼時候下載應用程式的素材。如果你的網路連線穩定,可以選擇一次把所有東西都下載完成;或是你也可以選擇稍後再下載其他資料片的素材,這樣子就能夠更快開啟應用程式。如果你選擇完全不使用某個資料片的功能,那麼你就完全不需要下載該資料片的素材。每部資料片的檔案大小約介於 30 MB 到 40 MB 之間,如果能夠跳過其中某幾部資料片的檔案不下載,對使用者來說會有很大的幫助!

各資料片的選擇性下載內容
把每部資料片劃分開來,使用者就不需要耗費大量時間下載檔案,可以馬上開始體驗!

管線改動

要把每部資料片的素材劃分開來,必須要針對管線的部分做出兩項調整:素材策展工具必須要能夠判斷哪個素材屬於哪部資料片,而且素材集合建立工具必須要能夠在建立最終集合時把這些素材劃分到一起。素材策展工具原本同樣也有針對《軍臨天下》和《決戰艾澤拉斯》的支援功能經過特殊設計,所以我們必須重新編寫程式碼,讓這個工具更能夠因應資料片的變化。工具的全新版本會檢查魔獸好戰友應用程式的資料片列表(做法是迭代 GarrisonType 列舉項目),並且把各資料片的素材輸出至各自獨立的資料夾當中。我們針對策展工具進行修改,使其能夠使用資料片的完整列表;這同時也就表示,該工具會自動提取日後新增至該列表的任何值,如此一來,我們很輕鬆就能夠添加新內容到魔獸好戰友應用程式裡面,不需要一直去更新工具。

素材檔案的建立和運行時間的負荷都十分仰賴 Unity 的 AssetBundle 版本功能,該功能能夠把魔獸好戰友應用程式中同一集合的不同版本視作同樣的集合。負責建立集合的管線會根據資料片專屬資料夾的策展工具輸出結果,針對各個資料片的各個集合製作出一個獨立的版本。只要改變魔獸好戰友應用程式的資料片,這些素材集合就會在運行的過程中切換。同一集合的所有版本都會被視作相同,舉例來說:任何程式碼都不需要考慮目前載入的追隨者頭像屬於哪一系列,也可以提取所需的追隨者頭像。如此一來,功能程式碼就不會再受到素材載入和素材卸載的限制;每部資料片都能以唯一資料片的姿態存在於魔獸好戰友應用程式當中。

進入暗影之境

往後當玩家在使用《暗影之境》的全新內容「冒險」時,或是在扮演分身角色體驗《軍臨天下》並提升等級時,都可以透過更強大的手機應用程式隨時隨地操作《魔獸世界》的遊戲內容!我們這次向大家介紹了我們的工作內容以及有關設計架構的各種抉擇,最終開發成果不只能夠支援目前的遊戲內容,也可以在日後配合《魔獸世界》的各種新內容。希望大家會喜歡這次的獨家揭密幕後特輯。

下一篇文章

重要消息