為游戲開發(fā)行業(yè)釋放 Git
游戲開發(fā)有許多獨特的要求,包括大型專有格式文件的管理。了解 Diversion 如何提供云原生、可擴展的 git 替代方案來滿足這些需求。
游戲可能是最常見的計算機(和移動)軟件類型之一——游戲占 Apple App Store 的 21.8%(截至 2021 年 6 月)和 Android Play Store 的類似比例。到 2024 年,視頻游戲的市場規(guī)模預計將增長到驚人的 2187 億美元,復合年增長率為 8.7%。
游戲主要適用于個人電腦、移動設備和專用游戲機,但它們并不止于此。近年來,元界取得了進展,迄今為止已售出超過 1500 萬臺 Oculus Quest,游戲是推動其采用的主要吸引力之一,它們將繼續(xù)是元界生態(tài)系統的關鍵部分。
作為軟件經濟的核心,簡化和優(yōu)化游戲開發(fā)可以轉化為直接的利益和收益。今天的大多數游戲都是使用 Unity 或 Unreal Engine 等游戲引擎開發(fā)的(還有其他幾個,但這兩個主導了市場),只有很少或沒有軟件開發(fā)經驗的藝術家可以創(chuàng)造出令人驚嘆的藝術,并與編寫代碼的開發(fā)人員合作推動比賽。
這些游戲引擎已經存在了幾十年,并且隨著技術的發(fā)展而顯著發(fā)展。它們功能強大,足以創(chuàng)建最先進的 2D 和 3D 圖形,但它們的定價(均包括免費層)足夠靈活,甚至獨立游戲工作室也可以使用它們。
然而,游戲開發(fā)就像任何其他類型的軟件的開發(fā)一樣,需要實施軟件開發(fā)最佳實踐,例如版本控制 (SCM)。Git、SVN、Perforce 和 PlasticSCM(2020 年被 Unity 收購并集成到 Unity 開發(fā)環(huán)境中)等工具如今在游戲開發(fā)公司中相當普遍。
但是請注意,這些工具中的大多數主要是為管理標準軟件源代碼而開發(fā)的,因此對于有一些獨特要求的游戲公司來說,它們并不是最理想的。網絡上的游戲開發(fā)論壇充滿了關于版本管理工具、最佳實踐和方法的討論。共識是,需要對 SCM 工具和工作流程進行一些調整,并對這些組織中的一些人進行專門培訓,以有效地使用版本管理。
游戲開發(fā)中的獨特挑戰(zhàn)
游戲開發(fā)的獨特優(yōu)勢之一始于與過程中的利益相關者一樣基本的東西。游戲開發(fā)需要游戲設計師與軟件工程師密切合作來構建和發(fā)布游戲軟件。最流行的平臺 Unity 和 Unreal 也有自己的一套要求和設計師專有的文件格式。
所有這些,連同質量要求和流程合規(guī)性,在使用典型的源代碼控制管理平臺時增加了相當多的摩擦。下面我們將逐一深入研究它們,看看它們在游戲開發(fā)中增加了哪些摩擦,以及如何消除這種摩擦,從而將現代軟件交付的好處帶入游戲開發(fā)。
游戲開發(fā)獨有的四大痛點是:
他們的文件和存儲庫非常大。
非技術利益相關者是技術交付的關鍵部分。
合規(guī)性測試和其他交付要求的復雜性。
難以解決專有文件格式中的沖突。
我們還將概述典型的工作流程,以及游戲開發(fā)可以從與其他工程領域更一致的改進流程中受益的地方。
文件和存儲庫大小
盡管流行的工程領域需要處理大型文件(從游戲開發(fā)到人工智能和機器學習)。這仍然很復雜且尚未解決。例如,其他工程領域中事實上的 SCM Git 需要使用名為 Git-LFS 的專用擴展來高效處理大文件。至少可以說,基于流行觀點,使用此擴展程序很麻煩,并且增加了過多的摩擦,使用戶的一切變得更慢。
即使是能夠原生處理大型二進制文件的工具,也會因為同步到變更列表或分支等功能需求而減慢工作流程。這需要在每次結帳或拉取時傳輸和替換作為正在處理的集合的一部分的大文件。即使文件與當前更改或正在完成的工作無關,也是如此。因此,許多游戲開發(fā)公司對大型二進制文件采用“影子版本管理”,使用 Google Drive 或 Dropbox 等工具,其中版本被編碼為文件或文件夾名稱,并應用手動過程來“縫合”這些文件使用在 SCM 系統中找到的源代碼將它們組合成一個連貫的項目。
關鍵的非技術利益相關者
在游戲開發(fā)團隊中占很大比例的設計師和美術師不太習慣 SCM 工具相對復雜的工作流程(例如,分支、簽出、提交),盡管他們需要將他們的工件與代碼一起交付并使用與軟件交付相同的工作流程。
雖然這可以通過培訓來克服,但許多組織通常使用 Google Drive 或 Dropbox 等工具來處理這個問題(這也消除了前面討論的大文件大小問題)。這給培訓和入職,甚至招聘人才增加了很多摩擦。它還增加了與文件格式及其在典型測試、質量和自動化流程中的管理相關的其他方面的摩擦,我們很快就會談到。
針對合規(guī)性和游戲要求進行測試
游戲開發(fā)具有嚴格的合規(guī)要求,以確保最終產品的質量,并允許不同利益相關者之間進行高效、簡化的協作。然而,由于所創(chuàng)建文件的性質、軟件文件和專有格式之間的差異,將典型的質量、測試和自動化門應用于游戲軟件是相當復雜的。這需要大量人工干預和額外的膠帶來驗證軟件是否符合相關要求。
需要的人工和人工干預越多,流程中的摩擦就越大,發(fā)生錯誤的可能性就越大。手動和人工流程更容易出錯。游戲開發(fā)克服這一問題的一種方法是在設計團隊(“技術藝術家”)中安排專職人員,將大型二進制圖形文件整合到 SCM 工具中。一些公司甚至構建了自己的專有工具和插件(有些公司將它們貢獻給他們的社區(qū))來克服圍繞 SCM 的這些限制。然而,這些過程應該是自動化的,就像在其他領域一樣。
合并專有文件格式
與前一個挑戰(zhàn)密切相關的是解決專有文件中的沖突并將它們合并到主/生產中。這也很大程度上取決于必須解決專有 YAML 和二進制文件中的沖突的技術藝術家。由于缺乏更好的選擇,這通常會導致手動重新實現導致沖突的功能之一并重新提交生成的文件。基本上每個游戲設計合并沖突都像是你在 Git 中經歷過的最嚴重的合并沖突。所以想象一下這種情況發(fā)生的頻率以及這給游戲開發(fā)過程增加了多少摩擦。對更多文件格式和部署過程的更大支持可以顯著改變這一點。
游戲開發(fā)需要重新思考
游戲是一項嚴肅的業(yè)務,具有可觀的收入來源和激烈的競爭,這需要游戲開發(fā)使工作流與更先進的軟件交付原則保持一致,從而從自動化、速度和效率中獲得更大的收益。許多真正的挑戰(zhàn)與他們的 SCM 能夠支持的基本內容密切相關。迄今為止,對于這個行業(yè)在工程和交付方面面臨的挑戰(zhàn),似乎仍然沒有一個好的解決方案。
我們已經從理論出發(fā),今天我們擁有更先進的工具來克服尺寸和規(guī)模帶來的許多技術挑戰(zhàn)。游戲開發(fā)應該能夠從這些進步中獲得類似的好處。在Diversion,我們認為游戲行業(yè)在云原生工程實踐方面應該是一等公民,并且應該擁有支持其獨特需求和工作流程的工具。Diversion提供了一種云原生、可擴展的 git 替代方案。
我們相信有可能構建一個現代工具來幫助解決游戲開發(fā)人員使用當前 SCM 工具所面臨的獨特挑戰(zhàn),其中大多數工具已經存在了 20 年或更長時間,并且沒有像其他工程工具和框架那樣進步。通過與領先的游戲公司合作,幫助識別挑戰(zhàn)并從他們的流程中無情地消除摩擦,我們可以將游戲開發(fā)工作流程與其他領域中可能對業(yè)務產生直接影響的精英軟件交付保持一致。