本課程主要記錄了筆者項(xiàng)目初期碰到的并值得一說(shuō)的實(shí)際業(yè)務(wù)問(wèn)題,涵蓋了比較多客戶(hù)端框架設(shè)計(jì)的內(nèi)容,以及有效提升開(kāi)發(fā)者編程體驗(yàn)的內(nèi)容。
主要包括以下內(nèi)容以及一些其他配套的小工具。
- Luban配表工具的使用介紹
-?ECS設(shè)計(jì)下的加載管理
-?設(shè)計(jì)項(xiàng)目資源規(guī)范化
-?設(shè)計(jì)本地化組件
-?C# Task使用指南
-?設(shè)計(jì)技能系統(tǒng)
-?Unity Android多渠道管理
作者L:杭州某游戲公司客戶(hù)端主程
從事游戲行業(yè)六年有余,目前主要在公司負(fù)責(zé)通用底層框架設(shè)計(jì),及一款手游項(xiàng)目的客戶(hù)端主程
目錄
1| Luban Excel配表工具使用推薦及總結(jié)
2| 基于ECS設(shè)計(jì)下的加載管理
3| 對(duì)資源的規(guī)范化我們能做什么
4| 如何設(shè)計(jì)本地化組件
5| C# Task指南
6| 如何設(shè)計(jì)技能系統(tǒng)
7| Unity Andorid多渠道管理
附錄1| 一些關(guān)于代碼積累的記錄
附錄2| 如何設(shè)計(jì)角色屬性組件
附錄3| CliToolkit工具
附錄4| ET Entity Tree 工具
附錄5| 內(nèi)網(wǎng)Package管理
本篇轉(zhuǎn)載自《Unity開(kāi)發(fā)實(shí)戰(zhàn)經(jīng)驗(yàn)分享》的第1節(jié)。
幾乎每個(gè)游戲的制作過(guò)程中都少不了和配置打交道的需求,有的是用Unity自帶的ScriptObject進(jìn)行存儲(chǔ),或者更多的是使用Excel等表格工具,二次導(dǎo)出配置文件等。
每種方案見(jiàn)仁見(jiàn)智,依照不同的使用場(chǎng)景各有優(yōu)劣。
一般來(lái)說(shuō)數(shù)據(jù)的輸入都是由策劃來(lái)完成的,而大部分策劃非常傾向于使用Excel作為日常配置使用的工具,尤其是在需要批量拉表的場(chǎng)景下,其他的方案在這個(gè)場(chǎng)景下與Excel幾乎沒(méi)有任何可比性。
相關(guān)鏈接
為什么使用Luban
如果項(xiàng)目中使用Excel作為配表的載體,大部分都會(huì)選擇使用相關(guān)的導(dǎo)表工具,可能是項(xiàng)目自己開(kāi)發(fā),也可能是使用一些現(xiàn)成的工具,比如Git上tabtoy、excel2json等相關(guān)工具。
但是上面這些,包括大部分自己開(kāi)發(fā)的導(dǎo)表工具,或多或少都會(huì)存在一些致命的限制,或者不夠通用,亦或者不夠靈活等等的問(wèn)題。
一個(gè)具有普適性的配表工具需要兼容的場(chǎng)景非常多,各種語(yǔ)言、自定義生成模板、數(shù)據(jù)反倒、數(shù)據(jù)有效性驗(yàn)證等等。
而Luban是目前唯一一個(gè)市面上有資格成為行業(yè)配表標(biāo)準(zhǔn)的工具,未來(lái)也很難會(huì)有同類(lèi)產(chǎn)品可以超越。
核心功能介紹
數(shù)據(jù)有效性驗(yàn)證
這里的數(shù)據(jù)有效性不是指bool的格子填了一個(gè)int。
有效性驗(yàn)證這個(gè)問(wèn)題之前讓我非常頭大,經(jīng)常出現(xiàn)策劃跑過(guò)來(lái)找你說(shuō):“我這里程序有 bug,你檢查一下”,然后花了半天時(shí)間查到了因?yàn)榕浔碇心骋恍械膇d或者關(guān)鍵數(shù)據(jù)填寫(xiě)不合法。
一次兩次還可以,次數(shù)多了難免心態(tài)不好,尤其當(dāng)人員發(fā)生變動(dòng),新來(lái)的人無(wú)法完全理解每個(gè)值的意義,就很容易放飛自我,最終就是事故,而這些問(wèn)題是可以從源頭有效切斷的。
如果你項(xiàng)目中配表的內(nèi)容存在某個(gè)地方需要相關(guān)人員記住應(yīng)該怎么配,而沒(méi)有相關(guān)自動(dòng)校驗(yàn),那么這里假以時(shí)日一定會(huì)出問(wèn)題。
工具支持的校驗(yàn)器如下:

當(dāng)然,一個(gè)游戲的開(kāi)發(fā)如果需要完整校驗(yàn)所有配置的合法性,上述這些校驗(yàn)器是無(wú)法完全滿(mǎn)足的,或者說(shuō)這些復(fù)雜場(chǎng)景不應(yīng)該由Luban來(lái)解決,所以針對(duì)這些場(chǎng)景,在官方示例中有一個(gè)CfgValidator來(lái)處理這種問(wèn)題。

生成模板
一個(gè)合格的配表工具應(yīng)當(dāng)兼容自定義生成代碼功能,而Luban這里使用的是scriban的方案。
當(dāng)你有代碼定制需求時(shí),99%的場(chǎng)景不需要改代碼生成工具的源碼即可完成定制需求。
在我整理的Luban 簡(jiǎn)單文檔這個(gè)文檔里面包含了模板具體生成的介紹,可以加速你理解如何自定義模板。在Luban現(xiàn)有的設(shè)計(jì)下,幾乎可以兼容任何場(chǎng)景(包括老項(xiàng)目的遷移)。
復(fù)雜類(lèi)型的填寫(xiě)
在這個(gè)倉(cāng)庫(kù)中,Luban 簡(jiǎn)單示例的多態(tài)示例中可以很直觀地看到繼承相關(guān)的復(fù)雜類(lèi)型應(yīng)當(dāng)如何在Excel中展開(kāi)和填寫(xiě)。

配表支持繼承在很多游戲開(kāi)發(fā)場(chǎng)景中非常非常受用,比如游戲中的道具、裝備和英雄類(lèi)的定義一定存在共用數(shù)據(jù)結(jié)構(gòu)和特化的數(shù)據(jù)結(jié)構(gòu)等,如果沒(méi)有繼承這里的代碼會(huì)非常難看,而且配表填寫(xiě)的內(nèi)容也會(huì)成為災(zāi)難。
Luban支持任意復(fù)雜數(shù)據(jù)結(jié)構(gòu)的嵌套,只有在代碼中能定義出來(lái),Luban就能解析,但是在實(shí)際使用中,并不推薦使用非常復(fù)雜的數(shù)據(jù)結(jié)構(gòu),這樣會(huì)給策劃帶來(lái)額外的填表負(fù)擔(dān),以及部分場(chǎng)景下的代碼生成的額外工作量。
數(shù)據(jù)及定義過(guò)濾
一些定義只需要在客戶(hù)端使用,或者只會(huì)在服務(wù)端使用,需要在生成時(shí)進(jìn)行動(dòng)態(tài)剔除,當(dāng)然這個(gè)功能,一般的配表工具也都支持,但Luban額外考慮到了一些場(chǎng)景,比如這一條數(shù)據(jù)需要臨時(shí)注釋或者僅在測(cè)試環(huán)境下使用。

這里的 test就非常有用,我們會(huì)單獨(dú)配置一套test數(shù)據(jù),用于游戲中的核心邏輯驗(yàn)證,及測(cè)試用例的輔助配表,而這些數(shù)據(jù)不會(huì)出現(xiàn)在正式環(huán)境下。
數(shù)據(jù)反倒
有時(shí)候會(huì)有這種場(chǎng)景,項(xiàng)目一些配置需要在Unity等游戲引擎中完成,可能是一些技能的配置等,這個(gè)時(shí)候就可能需要反倒數(shù)據(jù)。
如果是一些老的項(xiàng)目需要遷移,也是一個(gè)非常合適的場(chǎng)景。
本地化
只要是配表工具,就一定繞不開(kāi)本地化這件事,Luban同樣也提供了本地化的解決方案。
這里值得一提的是,Luban會(huì)將所有未加入翻譯表的key單獨(dú)輸出到指定的文件中,方便檢查。
其他
Luban支持的序列化格式、語(yǔ)言和場(chǎng)景非常多,這里不一一介紹了,僅對(duì)我目前使用中碰到的核心功能進(jìn)行介紹。
流程推薦
下面提到的內(nèi)容在Luban 簡(jiǎn)單示例倉(cāng)庫(kù)中都可以找到相關(guān)代碼。
導(dǎo)出腳本選擇
個(gè)人比較推薦實(shí)用sh作為項(xiàng)目通用導(dǎo)表工具,Windows需要配置sh文件默認(rèn)使用git bash作為打開(kāi)方式即可。

這里主要考慮的是平臺(tái)兼容性問(wèn)題,比如開(kāi)發(fā)環(huán)境中可能有人使用的是Mac也可能是Windows,但是在部署時(shí)大部分都是Linux服務(wù)。如果每個(gè)平臺(tái)單獨(dú)維護(hù)一份腳本,加上不同環(huán)境和使用場(chǎng)景,這里對(duì)應(yīng)的文件數(shù)量就比較離譜了。
test、dev、release
建議項(xiàng)目按照這種方式來(lái)劃分配表:
- test
????- 僅在測(cè)試用例、Editor 下使用
- dev
????-僅在開(kāi)發(fā)環(huán)境下使用
- release
????-僅在正式環(huán)境下使用
auto_validation
首先,我們并不希望策劃推送一個(gè)已經(jīng)被自動(dòng)流程檢測(cè)出錯(cuò)誤的提交,此時(shí)需要對(duì)Git進(jìn)行Hook,核心就是提交時(shí)本地檢查一遍,如果有錯(cuò)誤,禁止本次commit,將這種低級(jí)錯(cuò)誤扼殺在源頭。
watch
一般可能會(huì)有這種需要對(duì)配置熱重載的功能,使用watch,配合自己項(xiàng)目中的熱重載就可以做到這邊保存Excel,Unity不需要重開(kāi)游戲就可以直接加載到新配置。
以上就是《Unity開(kāi)發(fā)實(shí)戰(zhàn)經(jīng)驗(yàn)分享》的第1節(jié),此篇文章比較適合從事游戲行業(yè)的開(kāi)發(fā)人員、對(duì)Unity開(kāi)發(fā)感興趣的同學(xué)以及希望提升底層設(shè)計(jì)能力,解決實(shí)際業(yè)務(wù)痛點(diǎn)的讀者。
讀完全篇后你會(huì)深入理解如何實(shí)現(xiàn)實(shí)際業(yè)務(wù)需求,提升底層設(shè)計(jì)能力以及部分文章的配套Demo。