初學(xué)者在使用Unity時(shí)很很可能不小心踩到一些在不利于項(xiàng)目開發(fā)的坑,粵嵌Unity3D培訓(xùn)在這里教的應(yīng)該避開哪些坑。
1.制作抽象的prefab來做關(guān)卡編輯
盡可能制作抽象的prefab來做關(guān)卡編輯,該prefab應(yīng)該足夠抽象簡單(只有一個(gè)GameObject,然后通過Gizmo來繪制是個(gè)不錯(cuò)的手段),否則以后變化的時(shí)候(常見的就是改美術(shù)資源),所有關(guān)卡都lost prefab,那么對策劃來說是一場災(zāi)難。
2.盡可能避免修改Scene,方法有幾種:
使用xml之類的數(shù)據(jù)組織場景
盡量多讓scene由prefab組成,這樣變動(dòng)都在prefab上
使用工具做場景Merge
3.不要過度依賴Component特性來開發(fā),考慮數(shù)據(jù)驅(qū)動(dòng)。
4.邏輯容易散落在編輯器各處,可以做一個(gè)中心管理。
利用unity的特性
組織好hierarchy,不管是編輯的時(shí)候還是運(yùn)行的時(shí)候,編輯的時(shí)候可以通過工具來簡化組織層級(jí)的工作。
讓每個(gè)場景自己能跑。
利用基于組件的架構(gòu),盡可能少的使用繼承(用C#的話),多通過組合來完成開發(fā)。遇到需要數(shù)據(jù)訪問的通用接口,我們可以通過組合的方式來完成,而不是提供一個(gè)公共基類接口來繼承,只要大家都認(rèn)識(shí)這個(gè)公共組件就可以取到數(shù)據(jù)了。
做好tag、layer規(guī)劃,要考慮業(yè)務(wù)中哪類物體之間需要交互。
在代碼里面get某個(gè)prefab或者GameObject,可以考慮利用界面拖目標(biāo)過來,這樣更加直觀,而且也能對抗變化,比如目標(biāo)名字變了也不怕,而且還能節(jié)省代碼量。
代碼
粵嵌Unity3D培訓(xùn)認(rèn)為,Unity3D容易被破解,因?yàn)榘l(fā)布版本的IL是非常容易被反編譯的,要做好混淆的考慮。在Unity3D中混淆要考慮對編輯器的影響。
復(fù)雜類型盡量使用引用類型,值類型反射麻煩,不方便序列化以及做成編輯器。值類型要小心賦值對象是否只是臨時(shí)對象。
引用類型釋放之后,引用它的指針會(huì)置為null,可以放心使用。Foreach、linq、協(xié)程慎用,反射只在編輯器中使用。考慮封裝Time,方便做暫停。
考慮使用調(diào)度器來完成功能,而不是在Update自己維護(hù)狀態(tài),這樣做暫停也很容易,代碼更清晰,功能更內(nèi)聚。
美術(shù)
復(fù)雜功能也應(yīng)該通過編輯器開發(fā)給策劃微調(diào),特別是可視化比較重要的模塊,比如動(dòng)作調(diào)整。
制作原型美術(shù),讓開發(fā)提升開發(fā)效率。有統(tǒng)一的約定,比如模型總是中心對齊,角色總是腳部對齊,統(tǒng)一的縮放、統(tǒng)一的動(dòng)畫骨骼命名,資源有統(tǒng)一的路徑。
支持換裝(avatar)要一開始就想清楚。
資源加載和優(yōu)化盡可能早地給出雛形(只是雛形,幫助你對需求的把握,因?yàn)檫@時(shí)候你還不知道熱點(diǎn)在哪)。因?yàn)橛须r形,那么代碼會(huì)間接一點(diǎn),也為改變提供了空間。
情況是在不斷地變化,要使自己的思想適應(yīng)新的情況,就得學(xué)習(xí)。開發(fā)時(shí)遇到的問題,粵嵌Unity3D培訓(xùn)建議要靈活處理。