本課程主要記錄了筆者項(xiàng)目初期碰到的并值得一說的實(shí)際業(yè)務(wù)問題,涵蓋了比較多客戶端框架設(shè)計(jì)的內(nè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:杭州某游戲公司客戶端主程
從事游戲行業(yè)六年有余肛根,目前主要在公司負(fù)責(zé)通用底層框架設(shè)計(jì),及一款手游項(xiàng)目的客戶端主程
目錄
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開發(fā)實(shí)戰(zhàn)經(jīng)驗(yàn)分享》的第1節(jié)漏策。
幾乎每個(gè)游戲的制作過程中都少不了和配置打交道的需求派哲,有的是用Unity自帶的ScriptObject進(jìn)行存儲(chǔ),或者更多的是使用Excel等表格工具掺喻,二次導(dǎo)出配置文件等芭届。
每種方案見仁見智,依照不同的使用場(chǎng)景各有優(yōu)劣感耙。
一般來說數(shù)據(jù)的輸入都是由策劃來完成的褂乍,而大部分策劃非常傾向于使用Excel作為日常配置使用的工具,尤其是在需要批量拉表的場(chǎng)景下即硼,其他的方案在這個(gè)場(chǎng)景下與Excel幾乎沒有任何可比性逃片。
相關(guān)鏈接
為什么使用Luban
如果項(xiàng)目中使用Excel作為配表的載體,大部分都會(huì)選擇使用相關(guān)的導(dǎo)表工具只酥,可能是項(xiàng)目自己開發(fā)褥实,也可能是使用一些現(xiàn)成的工具,比如Git上tabtoy裂允、excel2json等相關(guān)工具损离。
但是上面這些,包括大部分自己開發(fā)的導(dǎo)表工具绝编,或多或少都會(huì)存在一些致命的限制僻澎,或者不夠通用貌踏,亦或者不夠靈活等等的問題。
一個(gè)具有普適性的配表工具需要兼容的場(chǎng)景非常多窟勃,各種語言祖乳、自定義生成模板、數(shù)據(jù)反倒拳恋、數(shù)據(jù)有效性驗(yàn)證等等。
而Luban是目前唯一一個(gè)市面上有資格成為行業(yè)配表標(biāo)準(zhǔn)的工具砸捏,未來也很難會(huì)有同類產(chǎn)品可以超越谬运。
核心功能介紹
數(shù)據(jù)有效性驗(yàn)證
這里的數(shù)據(jù)有效性不是指bool的格子填了一個(gè)int。
有效性驗(yàn)證這個(gè)問題之前讓我非常頭大垦藏,經(jīng)常出現(xiàn)策劃跑過來找你說:“我這里程序有 bug梆暖,你檢查一下”,然后花了半天時(shí)間查到了因?yàn)榕浔碇心骋恍械膇d或者關(guān)鍵數(shù)據(jù)填寫不合法掂骏。
一次兩次還可以轰驳,次數(shù)多了難免心態(tài)不好,尤其當(dāng)人員發(fā)生變動(dòng)弟灼,新來的人無法完全理解每個(gè)值的意義级解,就很容易放飛自我,最終就是事故田绑,而這些問題是可以從源頭有效切斷的勤哗。
如果你項(xiàng)目中配表的內(nèi)容存在某個(gè)地方需要相關(guān)人員記住應(yīng)該怎么配,而沒有相關(guān)自動(dòng)校驗(yàn)掩驱,那么這里假以時(shí)日一定會(huì)出問題芒划。
工具支持的校驗(yàn)器如下:
當(dāng)然,一個(gè)游戲的開發(fā)如果需要完整校驗(yàn)所有配置的合法性欧穴,上述這些校驗(yàn)器是無法完全滿足的民逼,或者說這些復(fù)雜場(chǎng)景不應(yīng)該由Luban來解決,所以針對(duì)這些場(chǎng)景涮帘,在官方示例中有一個(gè)CfgValidator來處理這種問題拼苍。
生成模板
一個(gè)合格的配表工具應(yīng)當(dāng)兼容自定義生成代碼功能,而Luban這里使用的是scriban的方案调缨。
當(dāng)你有代碼定制需求時(shí)映屋,99%的場(chǎng)景不需要改代碼生成工具的源碼即可完成定制需求。
在我整理的Luban 簡單文檔這個(gè)文檔里面包含了模板具體生成的介紹同蜻,可以加速你理解如何自定義模板棚点。在Luban現(xiàn)有的設(shè)計(jì)下,幾乎可以兼容任何場(chǎng)景(包括老項(xiàng)目的遷移)湾蔓。
復(fù)雜類型的填寫
在這個(gè)倉庫中瘫析,Luban 簡單示例的多態(tài)示例中可以很直觀地看到繼承相關(guān)的復(fù)雜類型應(yīng)當(dāng)如何在Excel中展開和填寫。
配表支持繼承在很多游戲開發(fā)場(chǎng)景中非常非常受用,比如游戲中的道具贬循、裝備和英雄類的定義一定存在共用數(shù)據(jù)結(jié)構(gòu)和特化的數(shù)據(jù)結(jié)構(gòu)等咸包,如果沒有繼承這里的代碼會(huì)非常難看,而且配表填寫的內(nèi)容也會(huì)成為災(zāi)難杖虾。
Luban支持任意復(fù)雜數(shù)據(jù)結(jié)構(gòu)的嵌套烂瘫,只有在代碼中能定義出來,Luban就能解析奇适,但是在實(shí)際使用中坟比,并不推薦使用非常復(fù)雜的數(shù)據(jù)結(jié)構(gòu),這樣會(huì)給策劃帶來額外的填表負(fù)擔(dān)嚷往,以及部分場(chǎng)景下的代碼生成的額外工作量葛账。
數(shù)據(jù)及定義過濾
一些定義只需要在客戶端使用,或者只會(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)景侥祭。
本地化
只要是配表工具,就一定繞不開本地化這件事茄厘,Luban同樣也提供了本地化的解決方案矮冬。
這里值得一提的是,Luban會(huì)將所有未加入翻譯表的key單獨(dú)輸出到指定的文件中次哈,方便檢查胎署。
其他
Luban支持的序列化格式、語言和場(chǎng)景非常多窑滞,這里不一一介紹了琼牧,僅對(duì)我目前使用中碰到的核心功能進(jìn)行介紹恢筝。
流程推薦
下面提到的內(nèi)容在Luban 簡單示例倉庫中都可以找到相關(guān)代碼。
導(dǎo)出腳本選擇
個(gè)人比較推薦實(shí)用sh作為項(xiàng)目通用導(dǎo)表工具巨坊,Windows需要配置sh文件默認(rèn)使用git bash作為打開方式即可撬槽。
這里主要考慮的是平臺(tá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)目按照這種方式來劃分配表:
- test
????- 僅在測(cè)試用例敢靡、Editor 下使用
- dev
????-僅在開發(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不需要重開游戲就可以直接加載到新配置瑟蜈。
以上就是《Unity開發(fā)實(shí)戰(zhàn)經(jīng)驗(yàn)分享》的第1節(jié),此篇文章比較適合從事游戲行業(yè)的開發(fā)人員渣窜、對(duì)Unity開發(fā)感興趣的同學(xué)以及希望提升底層設(shè)計(jì)能力铺根,解決實(shí)際業(yè)務(wù)痛點(diǎn)的讀者。
讀完全篇后你會(huì)深入理解如何實(shí)現(xiàn)實(shí)際業(yè)務(wù)需求乔宿,提升底層設(shè)計(jì)能力以及部分文章的配套Demo位迂。