新聞中心
前段時(shí)間關(guān)于Unity是否適合國(guó)內(nèi)手游/網(wǎng)游創(chuàng)業(yè)團(tuán)隊(duì)的討論非?;鸨?,本文從《蒸汽之城》的開(kāi)發(fā)歷程談起,對(duì)于國(guó)內(nèi)網(wǎng)游團(tuán)隊(duì)是否應(yīng)該選擇Unity引擎,以及如何解決使用Unity開(kāi)發(fā)網(wǎng)游時(shí)遇到的各種主要問(wèn)題進(jìn)行討論。

廈門(mén)夢(mèng)加的蒸汽之城
《蒸汽之城》是廈門(mén)夢(mèng)加網(wǎng)絡(luò)的第一款作品,使用Unity引擎制作的蒸汽朋克風(fēng)3D實(shí)時(shí)戰(zhàn)斗MMORPG頁(yè)游。游戲擁有幻想工業(yè)時(shí)代恢弘蒼涼的場(chǎng) 景;豐富的種族、職業(yè)和技能系統(tǒng);和端游比也毫不遜色的優(yōu)質(zhì)畫(huà)面和特效;各式各樣的副本挑戰(zhàn)和PvP活動(dòng);最后,所有這一切用戶(hù)都能直接在瀏覽器中以極短 的下載時(shí)間享受到?!墩羝恰繁话ǜ2妓?、Massively、ZAM等知名媒體列為2013年最值得期待的MMORPG游戲之一,目前已經(jīng)簽約了多 家海外發(fā)行商,范圍覆蓋所有英語(yǔ)國(guó)家、東歐、土耳其和中東。土耳其版本已經(jīng)于3月1日(北京時(shí)間)正式開(kāi)始公開(kāi)測(cè)試。
夢(mèng)加團(tuán)隊(duì)當(dāng)初選擇Unity引擎的原因和大部分團(tuán)隊(duì)類(lèi)似,快速出原型、大量現(xiàn)成的內(nèi)置功能和中間件、支持在瀏覽器里展示高素質(zhì)的3D游戲畫(huà)面。在幾 年的開(kāi)發(fā)過(guò)程中團(tuán)隊(duì)才慢慢認(rèn)識(shí)到用Unity開(kāi)發(fā)MMO頁(yè)游需要克服太多問(wèn)題和陷阱。幸運(yùn)的是我們最終克服了絕大部分問(wèn)題,《蒸汽之城》也即將開(kāi)始海外公 測(cè)。下面我們會(huì)深入探討要完成一個(gè)高素質(zhì)的Unity頁(yè)游MMO,應(yīng)該解決哪些技術(shù)問(wèn)題和怎樣建設(shè)團(tuán)隊(duì)。
請(qǐng)注意,這里我們不會(huì)討論使用Unity制作單機(jī)游戲,因?yàn)閁nity單機(jī)或者有社交功能的手游都有太多成功的巨無(wú)霸例子,很多開(kāi)發(fā)者也通過(guò)自身經(jīng) 驗(yàn)表明小團(tuán)隊(duì)使用Unity制作輕量級(jí)的單機(jī)或社交游戲并無(wú)太大障礙,下面我們還是以多人在線,需要后臺(tái)和大量數(shù)據(jù)處理的MMORPG為例來(lái)討論。雖然夢(mèng) 加到目前為止都一直在開(kāi)發(fā)瀏覽器版本的游戲,但其中很多技術(shù)話(huà)題對(duì)于多人手游項(xiàng)目也同樣適用。
從傳統(tǒng)頁(yè)游到次世代技術(shù)
雖然Unity已經(jīng)有了7年多的歷史,這款引擎從誕生之初就一直保持了比較先進(jìn)的設(shè)計(jì)理念,包括其一直以來(lái)的首要賣(mài)點(diǎn):為開(kāi)發(fā)者提供基于瀏覽器的高 素質(zhì)3D游戲解決方案。Unity的特色既包括面向獨(dú)立開(kāi)發(fā)者的快速原型、低成本跨平臺(tái)發(fā)布,也在近年來(lái)整合了更多高端商用的中間件和次世代的渲染技術(shù)。 使用Unity現(xiàn)在已經(jīng)可以開(kāi)發(fā)素質(zhì)幾乎達(dá)到用Unreal Engine、CryEngine這些次世代引擎開(kāi)發(fā)的游戲,Unity也被越來(lái)越多的AAA工作室選用來(lái)開(kāi)發(fā)跨平臺(tái)的主機(jī)游戲。
這意味著Unity很好很強(qiáng)大,沒(méi)錯(cuò),但不代表團(tuán)隊(duì)選擇Unity就是理所當(dāng)然的。商用引擎的一大特點(diǎn)是兼容并包,要適合各種不同的項(xiàng)目和團(tuán)隊(duì)需 要,而作為次世代引擎,其中又包括了大量圖像、動(dòng)畫(huà)和資源管理的先進(jìn)技術(shù)。對(duì)于初創(chuàng)團(tuán)隊(duì)來(lái)說(shuō),選擇Unity雖然得到了一大堆可以快速見(jiàn)效的功能,但面對(duì) 這些功能時(shí)如何取舍,以及對(duì)引擎技術(shù)的理解和挖掘程度,都會(huì)對(duì)項(xiàng)目的命運(yùn)造成決定性的影響。
Unity雖然一直以易上手、原型快速、中間件豐富整合快速著稱(chēng),但隨著項(xiàng)目規(guī)模和復(fù)雜程度的上升,很快開(kāi)發(fā)團(tuán)隊(duì)就會(huì)進(jìn)入一塊網(wǎng)上各種單機(jī)游戲教程 無(wú)法涵蓋的真空地帶,而國(guó)內(nèi)網(wǎng)游技術(shù)分享的環(huán)境又相對(duì)比較薄弱,這時(shí)在一些關(guān)鍵的技術(shù)難題上,初創(chuàng)團(tuán)隊(duì)就會(huì)遇到很大的麻煩。從快速原型到攻克大規(guī)模項(xiàng)目的 技術(shù)難題之間,通常是讓很多團(tuán)隊(duì)無(wú)法正確估計(jì)成本的危險(xiǎn)過(guò)渡地帶。這也是很多使用Unity的項(xiàng)目結(jié)果反而不如使用自主開(kāi)發(fā)的引擎或相對(duì)老舊引擎的原因。 自主引擎任何功能都要自己開(kāi)發(fā),相對(duì)老舊的引擎功能較為局限,所以在內(nèi)容和功能規(guī)模方面的計(jì)劃一般不會(huì)太過(guò)狂放;而Unity這樣的引擎包括從官方和社區(qū) 的宣傳上都給人一種到處都是隨手可得的免費(fèi)午餐的感覺(jué),反而會(huì)讓團(tuán)隊(duì)的計(jì)劃更加激進(jìn),對(duì)困難認(rèn)識(shí)不足。
下文中我們會(huì)對(duì)這些危險(xiǎn)和解決方案進(jìn)行逐一的分析,希望能給經(jīng)驗(yàn)不足的團(tuán)隊(duì)提供警示和提前準(zhǔn)備好解決問(wèn)題的思路。
內(nèi)容規(guī)模和版本控制
開(kāi)發(fā)者在不同類(lèi)型和規(guī)模項(xiàng)目的經(jīng)驗(yàn),很大程度上造成了對(duì)”Unity是否適合手游/頁(yè)游創(chuàng)業(yè)團(tuán)隊(duì)“這一討論兩極分化的看法。對(duì)于以《Temple Run》、《亡靈殺手》等游戲?yàn)榘駱拥膯螜C(jī)游戲開(kāi)發(fā)者,以及CSR Racing這樣有多人對(duì)戰(zhàn)模式的單機(jī)游戲,即使團(tuán)隊(duì)很小使用Unity開(kāi)發(fā)都不會(huì)遇到什么太大的問(wèn)題。這些單機(jī)游戲非常適合發(fā)揮Unity游戲性成型快 的優(yōu)勢(shì),而內(nèi)購(gòu)、社交等功能都可以用現(xiàn)成的中間件來(lái)快速實(shí)現(xiàn)。
當(dāng)使用Unity制作有海量?jī)?nèi)容的網(wǎng)游時(shí),團(tuán)隊(duì)遇到的第一個(gè)問(wèn)題,就是無(wú)法把游戲的全部?jī)?nèi)容放進(jìn)一個(gè)Unity項(xiàng)目中。一方面資源文件數(shù)量達(dá)到一定 程度后,每次開(kāi)啟項(xiàng)目的導(dǎo)入過(guò)程就夠你泡壺茶;另外幾十人的團(tuán)隊(duì)共用一個(gè)項(xiàng)目,在版本控制和數(shù)據(jù)安全性方面也會(huì)有很大的危險(xiǎn),任何人的操作失誤都可能導(dǎo)致 整個(gè)項(xiàng)目癱瘓;最后不同分工的開(kāi)發(fā)者需要面對(duì)的項(xiàng)目數(shù)據(jù)和工作流程差別很大,共用同一個(gè)項(xiàng)目會(huì)在很大程度上降低生產(chǎn)效率。
《蒸汽之城》使用了很多個(gè)Unity項(xiàng)目來(lái)為各個(gè)不同的部門(mén)和小組提供定制的數(shù)據(jù)范圍,工具和流程。3D角色美術(shù)的項(xiàng)目里只使用角色數(shù)據(jù) (FBX->Prefab)和相關(guān)的預(yù)覽和打包工具;場(chǎng)景美術(shù)使用不同的項(xiàng)目來(lái)管理不同的場(chǎng)景;客戶(hù)端程序員使用的是主要的客戶(hù)端項(xiàng)目,他們的代碼 運(yùn)行后可以讀取其他開(kāi)發(fā)者上傳到服務(wù)器上的數(shù)據(jù),從而讓游戲跑起來(lái)。而大部分開(kāi)發(fā)者可以使用編譯成可執(zhí)行文件的客戶(hù)端來(lái)測(cè)試自己隨時(shí)向測(cè)試服務(wù)器上上傳的 資源和設(shè)計(jì)數(shù)據(jù),從而既保證了每個(gè)人能最高效在自己的領(lǐng)域里工作,又保證了自己生產(chǎn)的內(nèi)容能夠隨時(shí)在游戲版本中測(cè)試。
如此多的項(xiàng)目要怎樣實(shí)現(xiàn)版本控制呢?我們的解決方案是用Gitlab作為統(tǒng)一的管理平臺(tái),每個(gè)項(xiàng)目作為一個(gè)單獨(dú)的Git Repository(倉(cāng)庫(kù))。使用Git的最大優(yōu)勢(shì)在于客戶(hù)端項(xiàng)目的版本管理,客戶(hù)端項(xiàng)目隨時(shí)都有多名程序員在提交代碼,使用Git就能讓他們把測(cè)試代 碼和穩(wěn)定代碼通過(guò)不同分支(Branch)來(lái)管理。我們使用master分支作為穩(wěn)定的版本,來(lái)合并每個(gè)程序員提交并測(cè)試通過(guò)的個(gè)人測(cè)試分支;整個(gè)團(tuán)隊(duì)使 用的可執(zhí)行客戶(hù)端用master分支來(lái)編譯創(chuàng)建,就保證了新功能開(kāi)發(fā)的速度和主版本的穩(wěn)定性。
另一個(gè)優(yōu)勢(shì)在于Submodule的使用,通過(guò)Git的submodule功能我們可以在不同項(xiàng)目中共享一份核心的底層代碼和部分工具代碼,這樣就 不用為每個(gè)項(xiàng)目分別進(jìn)行游戲引擎和工具更新。Git作為目前最先進(jìn)的分布式版本控制系統(tǒng),在掌握難度上是非常高的。國(guó)內(nèi)網(wǎng)游團(tuán)隊(duì)即使是程序部門(mén)使用Git 作為版本控制系統(tǒng)的情況也不是太多,而夢(mèng)加做到整個(gè)團(tuán)隊(duì)都用Git作為日常的版本控制系統(tǒng),付出的努力雖高,但回報(bào)絕對(duì)物有所值。
數(shù)據(jù)處理和工具開(kāi)發(fā)
近期的討論中很多人認(rèn)為Unity的短板之一在于偏重代碼驅(qū)動(dòng)的引擎沒(méi)有辦法處理大批量的數(shù)據(jù),這種印象可能跟官方和社區(qū)對(duì)于那個(gè)運(yùn)行超級(jí)方便、什 么工作都能往里放的MonoBehavior類(lèi)的大力宣傳和依賴(lài)有關(guān)。實(shí)際上Unity里除了MonoBehavior還有使用.NET標(biāo)準(zhǔn)的自定義類(lèi), 有用法非常靈活的統(tǒng)一數(shù)據(jù)類(lèi)型scriptableObject,還有各種各樣只有你想不到?jīng)]有你做不到的編輯器腳本和數(shù)據(jù)處理接口。只不過(guò)除了 MonoBehavior,其他一切數(shù)據(jù)處理手段都需要開(kāi)發(fā)者去Unity的官方論壇和StackOverflow這樣的泛編程問(wèn)答站點(diǎn)深入挖據(jù)。官方論 壇上通過(guò)搜索,其實(shí)是能找到很多使用Unity做大數(shù)據(jù)量網(wǎng)游的同行討論的,只不過(guò)這樣的引擎在國(guó)內(nèi)還沒(méi)有形成很大規(guī)模的知識(shí)分享社區(qū),一些做的比較久的 中文Unity論壇也缺乏網(wǎng)游項(xiàng)目的討論,所以給人的印象就是Unity不擅長(zhǎng)做這個(gè)。
事實(shí)上,Unity處理各種數(shù)據(jù)類(lèi)型(XML,Json,SQL)都有現(xiàn)成的接口(用戶(hù)提供和分享的開(kāi)源代碼),而《蒸汽之城》策劃團(tuán)隊(duì)日常使用 Excel格式的數(shù)據(jù)配置,也可以很容易的轉(zhuǎn)化成XML后通過(guò)編輯器腳本導(dǎo)入U(xiǎn)nity。最后客戶(hù)端只要讀取和處理導(dǎo)入后的 scriptableObject就可以了,一些改動(dòng)頻繁的數(shù)據(jù)還可以直接使用XML格式在運(yùn)行時(shí)讀取,減少客戶(hù)端需要更新的頻率。
說(shuō)到數(shù)據(jù)處理使用的編輯器腳本,這里就必須要探討工具鏈開(kāi)發(fā)的問(wèn)題。對(duì)于任何大型項(xiàng)目,開(kāi)發(fā)配套工具都是至關(guān)重要的,Unity的特色在于編輯器本 身有著非常優(yōu)秀的可擴(kuò)展性,所以我們使用的工具鏈包括編輯器腳本和外部工具兩部分,分別用來(lái)處理客戶(hù)端和服務(wù)器端需要的數(shù)據(jù)。比如任務(wù)邏輯和對(duì)話(huà)的編輯器 是直接編輯數(shù)據(jù)庫(kù)的,所以我們使用VC制作的外部編輯工具。而包括關(guān)卡、資源導(dǎo)入、貼圖合并、NPC角色打包等等要處理Unity使用的資源數(shù)據(jù)的工具, 都是使用Unity腳本制作,開(kāi)發(fā)者通過(guò)菜單命令就可以快速完成資源管線操作和編輯。
一款數(shù)據(jù)量很大的網(wǎng)游在工具開(kāi)發(fā)和維護(hù)方面需要投入的力量是很大的,《蒸汽之城》在增加了工具開(kāi)發(fā)的人手后,其他開(kāi)發(fā)和資源生產(chǎn)部門(mén)的工作效率都得 到了顯著的提升。此外通過(guò)不斷改善工具的可用性,加入大量對(duì)用戶(hù)操作的預(yù)先檢定,可以有效的減少操作失誤造成的數(shù)據(jù)錯(cuò)誤,提高了游戲版本的穩(wěn)定性。
原型碎片和整合測(cè)試環(huán)境
上面提到Unity里能驅(qū)動(dòng)一切的MonoBehavior類(lèi)為原型開(kāi)發(fā)提供了很大的方便,但作為網(wǎng)游項(xiàng)目,任何功能和資源都需要在游戲?qū)嶋H聯(lián)網(wǎng)運(yùn) 行環(huán)境下進(jìn)行測(cè)試。如何在Unity網(wǎng)游項(xiàng)目中平衡原型開(kāi)發(fā)和實(shí)際聯(lián)網(wǎng)測(cè)試呢?項(xiàng)目早期基礎(chǔ)功能的原型,包括動(dòng)畫(huà)系統(tǒng)、圖像渲染、角色換裝等等,都是可以 直接建立單機(jī)原型的。用腳本實(shí)現(xiàn)基本功能后再加上編輯器腳本和GUI腳本來(lái)為測(cè)試加上配套工具,然后再交給資源生產(chǎn)部門(mén)來(lái)添加游戲中的資源。
地下城、任務(wù)和戰(zhàn)斗系統(tǒng)因?yàn)樯婕暗胶芏嗪头?wù)器端的通訊部分,如果需要測(cè)試就必須使用一個(gè)支持最簡(jiǎn)單的客戶(hù)端服務(wù)端架構(gòu)的單元測(cè)試檔案配置。這里所 說(shuō)的檔案,就是定義了你全部測(cè)試內(nèi)容數(shù)據(jù)(或者去哪里找這些數(shù)據(jù))的scriptableObject。包括你用來(lái)測(cè)試的帳號(hào)、角色信息、測(cè)試場(chǎng)景、任務(wù) 或技能配置等等。以主城和地下城為游戲內(nèi)容載體的《蒸汽之城》里,我們也制作大量測(cè)試用的地下城或主城場(chǎng)景作為任務(wù)和新功能生產(chǎn)的測(cè)試環(huán)境。測(cè)試環(huán)境由美 術(shù)或策劃來(lái)制作,然后交給程序部門(mén)來(lái)測(cè)試代碼,最后再交給QA測(cè)試剛完成的功能。
Unity的強(qiáng)大原型制作能力主要還是應(yīng)該體現(xiàn)在項(xiàng)目初期。一旦客戶(hù)端服務(wù)端架構(gòu)形成,可以在穩(wěn)定的服務(wù)器環(huán)境上運(yùn)行游戲以后,開(kāi)發(fā)團(tuán)隊(duì)就應(yīng)該把更 多的精力集中在如何能夠在實(shí)際服務(wù)器上快速添加新內(nèi)容并進(jìn)行測(cè)試。《蒸汽之城》有過(guò)三組測(cè)試服務(wù)器,分別用來(lái)進(jìn)行代碼、資源和網(wǎng)頁(yè)接口的測(cè)試;此外對(duì)于需 要頻繁更新調(diào)整數(shù)據(jù)的任務(wù)策劃和關(guān)卡設(shè)計(jì)人員,他們會(huì)使用在個(gè)人電腦上架設(shè)的服務(wù)器,來(lái)避免數(shù)據(jù)更新對(duì)其他人測(cè)試帶來(lái)的干擾。
動(dòng)態(tài)下載和讀取
對(duì)于網(wǎng)頁(yè)游戲來(lái)說(shuō),如果不能做到快速啟動(dòng)和最小化下載等待時(shí)間,相對(duì)于端游的優(yōu)勢(shì)就不存在了?!墩羝恰防锼忻佬g(shù)資源都被拆分成了非常小的零 件,這樣用戶(hù)只要下載一次,就可以在運(yùn)行游戲時(shí)根據(jù)需要來(lái)動(dòng)態(tài)組合,大量減少了資源的重復(fù)下載率。而地下城制作的時(shí)候會(huì)使用工具進(jìn)行 Serilization,游戲時(shí)每個(gè)地下城只需要下載一份XML表單,然后就會(huì)自動(dòng)從用戶(hù)已經(jīng)下載的“資源零件”中尋找需要的部分并進(jìn)行動(dòng)態(tài)拼裝。體驗(yàn) 過(guò)《蒸汽之城》的用戶(hù)可以發(fā)現(xiàn)任何地下城的讀取都不會(huì)超過(guò)數(shù)秒。
接下來(lái)說(shuō)說(shuō)Unity頁(yè)游的一大招牌Asset Bundle的使用。Asset Bundle是可以被用戶(hù)stream下載的資源包,其中可以包含任何Unity Project中的文件。要做到動(dòng)態(tài)下載,游戲中的絕大部分資源就都必須打包成Asset Bundle才能使用。在《蒸汽之城》的開(kāi)發(fā)過(guò)程中,我們?yōu)榇蟛糠仲Y源生產(chǎn)者制作了Unity編輯器內(nèi)的打包工具,只要選擇相應(yīng)的菜單命令就能自動(dòng)完成打 包和上傳到測(cè)試服務(wù)器上。在以后的項(xiàng)目中我們希望能采用Resource.Load()和Asset Bundle結(jié)合的方式,客戶(hù)端可以分別讀取原始的資源文件來(lái)使調(diào)試更方便,而測(cè)試通過(guò)后又可以切換成使用Asset Bundle來(lái)保證游戲的動(dòng)態(tài)下載正常運(yùn)行。Asset Bundle還有很多創(chuàng)意用法,大家可以看看官網(wǎng)上Unite2012的相關(guān)講座。
技術(shù)導(dǎo)向的團(tuán)隊(duì)建設(shè)
前面提到了Unity在項(xiàng)目規(guī)模和復(fù)雜程度從單機(jī)到網(wǎng)游的巨大增加,可以說(shuō)如果對(duì)于國(guó)內(nèi)大部分團(tuán)隊(duì),使用Unity制作網(wǎng)游都有著一定的風(fēng)險(xiǎn)和挑 戰(zhàn)。簡(jiǎn)單的說(shuō),Unity對(duì)于單機(jī)游戲來(lái)說(shuō),確實(shí)有很多“免費(fèi)附加值”可以用來(lái)快速搭建項(xiàng)目和完善產(chǎn)品功能,但在網(wǎng)游或較大型項(xiàng)目層面,如果沒(méi)有對(duì)于項(xiàng)目 質(zhì)量的較高要求,沒(méi)有一個(gè)好的團(tuán)隊(duì)技術(shù)氛圍和建設(shè)思路,選擇Unity得到的免費(fèi)回報(bào)和付出的技術(shù)建設(shè)成本實(shí)際是得不償失的。
假如看官讀到這里還對(duì)于使用Unity堅(jiān)定不移,可以看看下面對(duì)于如何建設(shè)Unity適用型技術(shù)團(tuán)隊(duì)的一些建議。
但作為網(wǎng)游項(xiàng)目,任何功能和資源都需要在游戲?qū)嶋H聯(lián)網(wǎng)運(yùn)行環(huán)境下進(jìn)行測(cè)試。如何在Unity網(wǎng)游項(xiàng)目中平衡原型開(kāi)發(fā)和實(shí)際聯(lián)網(wǎng)測(cè)試呢?項(xiàng)目早期基礎(chǔ) 功能的原型,包括動(dòng)畫(huà)系統(tǒng)、圖像渲染、角色換裝等等,都是可以直接建立單機(jī)原型的。用腳本實(shí)現(xiàn)基本功能后再加上編輯器腳本和GUI腳本來(lái)為測(cè)試加上配套工 具,然后再交給資源生產(chǎn)部門(mén)來(lái)添加游戲中的資源。
地下城、任務(wù)和戰(zhàn)斗系統(tǒng)因?yàn)樯婕暗胶芏嗪头?wù)器端的通訊部分,如果需要測(cè)試就必須使用一個(gè)支持最簡(jiǎn)單的客戶(hù)端服務(wù)端架構(gòu)的單元測(cè)試檔案配置。這里所 說(shuō)的檔案,就是定義了你全部測(cè)試內(nèi)容數(shù)據(jù)(或者去哪里找這些數(shù)據(jù))的scriptableObject。包括你用來(lái)測(cè)試的帳號(hào)、角色信息、測(cè)試場(chǎng)景、任務(wù) 或技能配置等等。以主城和地下城為游戲內(nèi)容載體的《蒸汽之城》里,我們也制作大量測(cè)試用的地下城或主城場(chǎng)景作為任務(wù)和新功能生產(chǎn)的測(cè)試環(huán)境。測(cè)試環(huán)境由美 術(shù)或策劃來(lái)制作,然后交給程序部門(mén)來(lái)測(cè)試代碼,最后再交給QA測(cè)試剛完成的功能。
Unity的強(qiáng)大原型制作能力主要還是應(yīng)該體現(xiàn)在項(xiàng)目初期。一旦客戶(hù)端服務(wù)端架構(gòu)形成,可以在穩(wěn)定的服務(wù)器環(huán)境上運(yùn)行游戲以后,開(kāi)發(fā)團(tuán)隊(duì)就應(yīng)該把更 多的精力集中在如何能夠在實(shí)際服務(wù)器上快速添加新內(nèi)容并進(jìn)行測(cè)試?!墩羝恰酚羞^(guò)三組測(cè)試服務(wù)器,分別用來(lái)進(jìn)行代碼、資源和網(wǎng)頁(yè)接口的測(cè)試;此外對(duì)于需 要頻繁更新調(diào)整數(shù)據(jù)的任務(wù)策劃和關(guān)卡設(shè)計(jì)人員,他們會(huì)使用在個(gè)人電腦上架設(shè)的服務(wù)器,來(lái)避免數(shù)據(jù)更新對(duì)其他人測(cè)試帶來(lái)的干擾。
首先,團(tuán)隊(duì)項(xiàng)目負(fù)責(zé)人和技術(shù)骨干關(guān)注Unity官方發(fā)布的信息和社區(qū)技術(shù)熱點(diǎn)討論是必須的。比如說(shuō)從Unity4開(kāi)始就可以在手游上使用動(dòng)態(tài)字體和 動(dòng)態(tài)陰影了,而這些消息的發(fā)布是在去年夏天的Unite前后,一直關(guān)注Unity新技術(shù)的團(tuán)隊(duì)就可以為項(xiàng)目提前做好特性計(jì)劃。而且Unite上大量非常有 價(jià)值的官方和開(kāi)發(fā)者講座,也能彌補(bǔ)很多官方教程和手冊(cè)中沒(méi)有涉及的空白區(qū)域,恰好是國(guó)內(nèi)網(wǎng)游團(tuán)隊(duì)急需的(比如Asset Bundle使用講座,Network基礎(chǔ)講座等等)。另外一個(gè)非常重要的知識(shí)庫(kù)是Unity的官方論壇 (http://forum.unity3d.com )和問(wèn)答社區(qū)(http://answers.unity3d.com ),這兩個(gè)社區(qū)站由官方技術(shù)人員和活躍的。
Unity用戶(hù)共同提供內(nèi)容和維護(hù)。配合Google搜索,你幾乎可以在這些社區(qū)網(wǎng)站上找到任何技術(shù)難題的答案,而且還會(huì)有各種實(shí)際案例的解決過(guò)程 (因?yàn)樘釂?wèn)的人很可能和你有著同樣的問(wèn)題)。當(dāng)然使用這些官方社區(qū)必須要有較好的英語(yǔ)閱讀能力,這本身就對(duì)技術(shù)團(tuán)隊(duì)的素質(zhì)有了一定的要求。國(guó)內(nèi)的 Unity社區(qū)和資訊網(wǎng)站也在越做越好,其中像Unity圣典(http://game.ceeger.com/forum/ )和Unity教程手冊(cè)系列(http://www.unitymanual.com/ )都是不錯(cuò)的資源入口,建議英文不夠熟練的朋友以這些中文網(wǎng)站為索引,慢慢將獲取知識(shí)的渠道擴(kuò)展到國(guó)外網(wǎng)站。
第二,Unity項(xiàng)目要形成有規(guī)律的從原型代碼到結(jié)構(gòu)化的重構(gòu)的循環(huán)過(guò)程。Unity做原型快,又有很多現(xiàn)成的解決方案,在開(kāi)發(fā)周期緊張的情況下, 開(kāi)發(fā)者很容易會(huì)不斷添加快速完成的功能,最后讓項(xiàng)目的結(jié)構(gòu)臃腫不堪,內(nèi)容擴(kuò)展到一定程度就會(huì)遭遇新功能添加的瓶頸。也就是說(shuō),如果沒(méi)有周期化的重構(gòu),項(xiàng)目 功能擴(kuò)展到一定程度后,再添加新功能或調(diào)整原有功能,其成本都會(huì)成倍上升。而太過(guò)頻繁的重構(gòu)又會(huì)影響項(xiàng)目進(jìn)度,如何把握這個(gè)度,就要根據(jù)團(tuán)隊(duì)人員的結(jié)構(gòu)來(lái) 精心安排了。
第三,Unity大型項(xiàng)目非常適合從早期就規(guī)劃好完整的工具鏈,根據(jù)不同開(kāi)發(fā)者的技能和使用習(xí)慣定制不同的工具。對(duì)于個(gè)人開(kāi)發(fā)者來(lái)說(shuō),Unity里 有大量的中間件可以滿(mǎn)足不同技術(shù)水平用戶(hù)的需要。在網(wǎng)游團(tuán)隊(duì)中也可以用相同的思路來(lái)提高效率,應(yīng)該盡量避免只有程序員使用Unity,美術(shù)和資源生產(chǎn)都只 局限在其他外部工具里的生產(chǎn)環(huán)境。另外工具鏈的功能擴(kuò)展和完善是一個(gè)長(zhǎng)期動(dòng)態(tài)的過(guò)程,根據(jù)項(xiàng)目在不同階段的狀態(tài),對(duì)于工具需求的變化是非常正常的。建議團(tuán) 隊(duì)從一開(kāi)始就安排足夠的人手開(kāi)發(fā)工具,并且將工具維護(hù)和需求收集作為日常工作流程的一部分看待。
后4.0時(shí)代特性展望
Unity適用型技術(shù)團(tuán)隊(duì)的一些建議。
但作為網(wǎng)游項(xiàng)目,任何功能和資源都需要在游戲?qū)嶋H聯(lián)網(wǎng)運(yùn)行環(huán)境下進(jìn)行測(cè)試。如何在Unity網(wǎng)游項(xiàng)目中平衡原型開(kāi)發(fā)和實(shí)際聯(lián)網(wǎng)測(cè)試呢?項(xiàng)目早期基礎(chǔ) 功能的原型,包括動(dòng)畫(huà)系統(tǒng)、圖像渲染、角色換裝等等,都是可以直接建立單機(jī)原型的。用腳本實(shí)現(xiàn)基本功能后再加上編輯器腳本和GUI腳本來(lái)為測(cè)試加上配套工 具,然后再交給資源生產(chǎn)部門(mén)來(lái)添加游戲中的資源。
地下城、任務(wù)和戰(zhàn)斗系統(tǒng)因?yàn)樯婕暗胶芏嗪头?wù)器端的通訊部分,如果需要測(cè)試就必須使用一個(gè)支持最簡(jiǎn)單的客戶(hù)端服務(wù)端架構(gòu)的單元測(cè)試檔案配置。這里所 說(shuō)的檔案,就是定義了你全部測(cè)試內(nèi)容數(shù)據(jù)(或者去哪里找這些數(shù)據(jù))的scriptableObject。包括你用來(lái)測(cè)試的帳號(hào)、角色信息、測(cè)試場(chǎng)景、任務(wù) 或技能配置等等。以主城和地下城為游戲內(nèi)容載體的《蒸汽之城》里,我們也制作大量測(cè)試用的地下城或主城場(chǎng)景作為任務(wù)和新功能生產(chǎn)的測(cè)試環(huán)境。測(cè)試環(huán)境由美 術(shù)或策劃來(lái)制作,然后交給程序部門(mén)來(lái)測(cè)試代碼,最后再交給QA測(cè)試剛完成的功能。
Unity的強(qiáng)大原型制作能力主要還是應(yīng)該體現(xiàn)在項(xiàng)目初期。一旦客戶(hù)端服務(wù)端架構(gòu)形成,可以在穩(wěn)定的服務(wù)器環(huán)境上運(yùn)行游戲以后,開(kāi)發(fā)團(tuán)隊(duì)就應(yīng)該把更 多的精力集中在如何能夠在實(shí)際服務(wù)器上快速添加新內(nèi)容并進(jìn)行測(cè)試?!墩羝恰酚羞^(guò)三組測(cè)試服務(wù)器,分別用來(lái)進(jìn)行代碼、資源和網(wǎng)頁(yè)接口的測(cè)試;此外對(duì)于需 要頻繁更新調(diào)整數(shù)據(jù)的任務(wù)策劃和關(guān)卡設(shè)計(jì)人員,他們會(huì)使用在個(gè)人電腦上架設(shè)的服務(wù)器,來(lái)避免數(shù)據(jù)更新對(duì)其他人測(cè)試帶來(lái)的干擾。
前面說(shuō)了些經(jīng)驗(yàn)和建議,最后這里再說(shuō)說(shuō)Unity4.0后夢(mèng)加的開(kāi)發(fā)者還在翹首以待的功能。希望提供給其他開(kāi)發(fā)者作為技術(shù)評(píng)估的參考,也希望Unity中國(guó)的大大們能夠看到并幫助改進(jìn)吧。
第一,Unity4開(kāi)始全面進(jìn)入了使用Retargetable(可重定向)動(dòng)畫(huà)技術(shù)和圖形動(dòng)畫(huà)狀態(tài)機(jī)的Mecanim的時(shí)代。 Retargetable動(dòng)畫(huà)是游戲業(yè)的巨大福音,制作一套動(dòng)畫(huà)就可以適用于不同的骨骼和蒙皮模型,對(duì)于項(xiàng)目生產(chǎn)來(lái)說(shuō)吸引力非常驚人。不過(guò)目前為止這個(gè)特 性還不能用于頁(yè)游的動(dòng)態(tài)載入,因?yàn)樨?fù)責(zé)動(dòng)畫(huà)Clip引用的Animator里不支持任何動(dòng)態(tài)讀取,可以說(shuō)是阻礙頁(yè)游項(xiàng)目全面升級(jí)Mecanim動(dòng)畫(huà)系統(tǒng)的 最大障礙了?!墩羝恰吩赨nity3.X時(shí)代就開(kāi)發(fā)了自定義的腳本FSM(有限狀態(tài)機(jī))來(lái)作為動(dòng)畫(huà)控制系統(tǒng),盡管在Unity4里我們已經(jīng)能夠使用 Mecanim的Avatar來(lái)運(yùn)行本地原型里的動(dòng)畫(huà)重定向,但因?yàn)椴荒軇?dòng)態(tài)讀取加載,一直還沒(méi)有在游戲中正式更換動(dòng)畫(huà)系統(tǒng),非常的遺憾。
第二,Unity4里說(shuō)好的新GUI系統(tǒng)無(wú)限期跳票。GUI的開(kāi)發(fā)對(duì)于任何項(xiàng)目來(lái)說(shuō)都意味著很大的挑戰(zhàn)和工作量,《蒸汽之城》的GUI使用的是 Unity自帶的GUI系統(tǒng)加上一套自己開(kāi)發(fā)的設(shè)計(jì)工具來(lái)制作。在GUI的設(shè)計(jì)和圖像生產(chǎn)方面已經(jīng)做到了高效率,但是調(diào)整GUI功能時(shí)代碼的修改量還是太 大了。盡管很多人在官方新GUI系統(tǒng)跳票之后已經(jīng)轉(zhuǎn)投了第三方中間件的解決方案,但作為有自己工具開(kāi)發(fā)組,對(duì)項(xiàng)目擴(kuò)展性要求很高的網(wǎng)游團(tuán)隊(duì),始終還是希望 能夠拿到官方的解決方案來(lái)定制,而不是依賴(lài)于某個(gè)隨時(shí)可能停止維護(hù)的第三方插件。由于Unity4.0目前GUI系統(tǒng)的懸而未決,我們?cè)谂涮譍UI系統(tǒng)的 優(yōu)化方面也被迫遭遇了停滯。很希望這個(gè)系統(tǒng)能夠最終塵埃落定!
第三,Timeline功能神龍見(jiàn)首不見(jiàn)尾,而且更糟糕的是Unity似乎已經(jīng)不再維護(hù)以前的Animation View了。Unity4里增加了完整的新動(dòng)畫(huà)系統(tǒng)Mecanim,但對(duì)于一些簡(jiǎn)單的UI或特效動(dòng)畫(huà),很多時(shí)候開(kāi)發(fā)者還是希望能夠在Unity里快速調(diào)整 和制作。Animation View在Unity4里效率下降,子物體動(dòng)畫(huà)曲線的顯示也有些奇怪。而集更多功能于一身的Timeline在Unite2012上亮相之后卻遲遲不見(jiàn)更 新的消息。Mecanim是一個(gè)專(zhuān)門(mén)處理骨骼動(dòng)畫(huà)、動(dòng)作捕捉、動(dòng)畫(huà)分層和融合的專(zhuān)業(yè)系統(tǒng),但除此之外一個(gè)有時(shí)間線和關(guān)鍵幀的編輯器還是對(duì)任何游戲項(xiàng)目都非 常有用的,個(gè)人認(rèn)為Unity團(tuán)隊(duì)不應(yīng)忽略這方面的需求。
腳本來(lái)為測(cè)試加上配套工具,然后再交給資源生產(chǎn)部門(mén)來(lái)添加游戲中的資源。
地下城、任務(wù)和戰(zhàn)斗系統(tǒng)因?yàn)樯婕暗胶芏嗪头?wù)器端的通訊部分,如果需要測(cè)試就必須使用一個(gè)支持最簡(jiǎn)單的客戶(hù)端服務(wù)端架構(gòu)的單元測(cè)試檔案配置。這里所 說(shuō)的檔案,就是定義了你全部測(cè)試內(nèi)容數(shù)據(jù)(或者去哪里找這些數(shù)據(jù))的scriptableObject。包括你用來(lái)測(cè)試的帳號(hào)、角色信息、測(cè)試場(chǎng)景、任務(wù) 或技能配置等等。以主城和地下城為游戲內(nèi)容載體的《蒸汽之城》里,我們也制作大量測(cè)試用的地下城或主城場(chǎng)景作為任務(wù)和新功能生產(chǎn)的測(cè)試環(huán)境。測(cè)試環(huán)境由美 術(shù)或策劃來(lái)制作,然后交給程序部門(mén)來(lái)測(cè)試代碼,最后再交給QA測(cè)試剛完成的功能。
Unity的強(qiáng)大原型制作能力主要還是應(yīng)該體現(xiàn)在項(xiàng)目初期。一旦客戶(hù)端服務(wù)端架構(gòu)形成,可以在穩(wěn)定的服務(wù)器環(huán)境上運(yùn)行游戲以后,開(kāi)發(fā)團(tuán)隊(duì)就應(yīng)該把更 多的精力集中在如何能夠在實(shí)際服務(wù)器上快速添加新內(nèi)容并進(jìn)行測(cè)試?!墩羝恰酚羞^(guò)三組測(cè)試服務(wù)器,分別用來(lái)進(jìn)行代碼、資源和網(wǎng)頁(yè)接口的測(cè)試;此外對(duì)于需 要頻繁更新調(diào)整數(shù)據(jù)的任務(wù)策劃和關(guān)卡設(shè)計(jì)人員,他們會(huì)使用在個(gè)人電腦上架設(shè)的服務(wù)器,來(lái)避免數(shù)據(jù)更新對(duì)其他人測(cè)試帶來(lái)的干擾。
結(jié)語(yǔ)
制作網(wǎng)游或有聯(lián)網(wǎng)功能的手游本身就是艱巨的工程,Unity讓表面的一切看起來(lái)更美好和更容易,但不可否認(rèn)廣泛獲得成功的Unity項(xiàng)目還是以相對(duì)簡(jiǎn)單的手機(jī)游戲?yàn)橹?。在網(wǎng)游制作方面開(kāi)發(fā)者能參考的知識(shí)和信息還是太少了。夢(mèng)加團(tuán)隊(duì)從零開(kāi)始一點(diǎn)點(diǎn)的把Unity網(wǎng)游制作各個(gè)謎題拼起來(lái),到了今天終于有 了即將上線的高素質(zhì)的頁(yè)游《蒸汽之城》。希望我們這里總結(jié)的經(jīng)驗(yàn)?zāi)軌驇椭鷩?guó)內(nèi)業(yè)界的朋友們,我們的解決方案也有很多不足的地方,希望國(guó)內(nèi)開(kāi)發(fā)者們能夠多多 分享,促進(jìn)Unity和網(wǎng)游開(kāi)發(fā)技術(shù)的交流!《蒸汽之城》的中文本地化版本也在進(jìn)展中,預(yù)計(jì)暑期就會(huì)跟大家見(jiàn)面!
本文標(biāo)題:Unity網(wǎng)游開(kāi)發(fā)生存干貨分享:蒸汽之城實(shí)例解說(shuō)
網(wǎng)站地址:http://fisionsoft.com.cn/article/coisojs.html


咨詢(xún)
建站咨詢(xún)
