DA項目技術小結

最近一直在忙的項目終於要在海外進行付費測試了,抽空小結一下用到的技術要點。

項目是基於Unity Tilemap-Isometric的2D休閒養成遊戲,場景裝飾物是Sprite和Spine,角色則是3D的。

1. 地圖地表採用了類似《魔獸爭霸》的地表紋理八方向自動拼接方式,產品可以直接通過畫刷進行繪製而不用手動處理拐角問題。效果和算法參考了:https://www.cnblogs.com/sifenkesi/archive/2011/03/03/1970051.html

2. 地圖海水效果參考了一些競品的Shader,暴力用GPA和AdrenoProfiler抓幀分析渲染方式,隨後對Shader進行修改調整,最終效果只能說差強人意吧。抓幀相關內容可以看:https://blog.csdn.net/ZhangDi2017/article/details/100069880

3. 爲了讓3D角色和2D場景進行正確的遮擋穿插,仿造《部落衝突》的方式,先將角色渲染到RT上,再將RT作爲2DMesh的材質貼圖,這樣可以通過調整SortingGroup就實現和2D場景的穿插關係。《部落衝突》的渲染方式可以看:https://blog.csdn.net/ZhangDi2017/article/details/103742707

4. Spine的動畫會在每幀進行更新,哪怕動畫只用1幀。Spine動畫的Update包含大量的數學計算,佔用很高的CPU,因此要對Spine進行優化,一個很有效的方法就是判斷動畫是否只有1幀,如果是則播放後立刻禁用動畫組件。考慮到有些Spine動畫不在屏幕內,可以將出屏幕的Spine動畫暫停。

5. 3D模型在Tilemap-Isometric模式下的顯示問題。需要調整3D模型父物體的角度,以便在統一3D模型和Tilemap的x-y座標。算出來是一個直觀上很難理解的歐拉角:Vector3(335.9052f, 50.76849f, 333.4349f)。這個角度便是將正方體視覺上調整爲正六邊形的角度。

6. 遊戲邏輯方面,實現了一套劇情腳本系統和一套觸發器系統。劇情繫統把動作拆分到原子級別供產品去調用,比如移動角色、縮放鏡頭、播放特效等,線性執行,通過等待時間來控制一些異步操作如等待角色移動到某位置。觸發器系統則仿造了《魔獸爭霸3》的觸發器系統,每個觸發器分爲事件條件和動作,遊戲邏輯會拋出各種事件如當角色進入某區域,這時相關觸發器會檢查是否滿足條件,如果滿足條件則開始執行動作。

7. UI動畫方面,2D遊戲UI動畫還是很重要的,項目基於DoTween實現了一套動畫編輯系統,基本思路是將各種動畫類型拆分到原子級別讓美術同學自行組裝出複雜的動畫效果。例如:獎勵物品先從小放大縮放掉出,停頓一會兒,按貝塞爾曲線飛到揹包圖標的位置,接着揹包圖標縮放彈性一下,最後播放音效。這套系統使得動畫不需要程序來硬編碼,美術可以完全掌控動畫效果。

8. 最後推薦一下項目採用的腳本語言,C#實現的虛擬機,我們客戶端主程大佬自行研發。鏈接:https://github.com/qingfeng346/Scorpio-CSharp。比Lua內存佔用小,調用C#時比Lua速度要快。語法缺什麼可以自己實現。比如C#的語法糖:delegate?.Invoke(args),我們在腳本里則實現了更爲簡潔的語法:delegate?.(args)。值得一提的是,我們遊戲邏輯部分沒有Tick,靠的是各種Timer,遊戲腳本也不需要gameObject.transform.position = xxxx這樣冗餘的訪問,大部分常用功能都在C#裏面封裝好了,比如Util.SetActive(obj, false1),obj可以是很多類型比如Image、Transform,C#這邊會取obj對應的GameObject,進行容錯處理等等,這樣的做法好處是大幅減少了腳本對C#的反覆冗餘調用,讓腳本真正的發揮腳本語言的膠水作用。

等項目正式上線再補一下游戲截圖。

最後感慨一下,項目雖小,也是五臟俱全,開發期間既要把控研發進度,也要兼顧性能問題。另外也要重視各種自動化生產工具和檢查工具,通過這些工具制定程序、美術規範來保證產出內容的合格性,及時發現問題,減少後期返工的可能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章