MV分離
1、界面和邏輯分離
邏輯和界面分離,是游戲開發(fā)最核心的思路。
簡(jiǎn)單的說,游戲的邏輯類,依賴于你的游戲框架,而并非unity。
什么是游戲框架呢?也就是具備獨(dú)立的生命周期的框架。你的游戲邏輯是應(yīng)該完全依賴于自己的游戲框架。這樣,你只需要改動(dòng)一下框架接口,就可以進(jìn)行代碼移植。
UI最簡(jiǎn)單就是MVC模式,MVC是一套相對(duì)來說簡(jiǎn)單的代碼分離的方案。就個(gè)人感覺而言。其實(shí)如果不考慮重構(gòu),多數(shù)情況下,V依賴于M也是可以的。不需要完全分離。
所以一般游戲應(yīng)該分為邏輯層、視圖層、數(shù)據(jù)層。
數(shù)據(jù)層通常指基本的配置數(shù)據(jù),玩家的游戲數(shù)據(jù)。
邏輯層是游戲的核心邏輯,是演變數(shù)據(jù)的邏輯
視圖層是展示游戲數(shù)據(jù)的界面。同時(shí)也具備與邏輯交互的接口,以便玩家控制游戲。
V的一個(gè)問題是,如果數(shù)據(jù)變化了,UI應(yīng)該怎么刷新。
刷新UI的方法有兩種,
1、對(duì)于進(jìn)度條這類,變化很頻繁的,由UI定時(shí)輪詢
2、對(duì)于刷新次數(shù)不頻繁的,比如給背包中添加一個(gè)道具。此時(shí)推薦通過事件傳遞。
做兩個(gè)簡(jiǎn)單的例子。2d和3d。rpg
在游戲引擎中,如果需要讓go產(chǎn)生變化,相應(yīng)的需要為go綁定與游戲邏輯耦合的腳本。這些腳本會(huì)控制go產(chǎn)生變化,從而讓玩家能夠隨時(shí)掌握數(shù)據(jù)的變化(即時(shí)反饋)。
在物理模擬上,也有兩種方案,如果是簡(jiǎn)單的位置判斷,AABB也可以實(shí)現(xiàn),那么完全不用給對(duì)象添加碰撞體,在自定義的簡(jiǎn)單物理系統(tǒng)中進(jìn)行模擬,效率更高。但是對(duì)于fps這種,需要相對(duì)完備的碰撞體的游戲,則需要使用游戲自帶的物理系統(tǒng)進(jìn)行模擬,而發(fā)射出來的子彈,也是一個(gè)實(shí)實(shí)在在具備有游戲邏輯的實(shí)體。這些實(shí)體通過相互的碰撞事件來驅(qū)動(dòng)游戲邏輯。
而各種特效,只是特效,不應(yīng)該具備任何邏輯。
也就是說,如何做碰撞判斷可以交給引擎。但是如何處理碰撞產(chǎn)生的效果,有游戲邏輯進(jìn)行處理。游戲邏輯不應(yīng)依賴于視圖,也就是游戲引擎部分,理論上,游戲視圖展示的效果無論多復(fù)雜,他都不能影響游戲邏輯的復(fù)雜度。也就是說,視圖的設(shè)計(jì)不應(yīng)該影響游戲邏輯的設(shè)計(jì)。
2、數(shù)據(jù)驅(qū)動(dòng)
保存數(shù)據(jù)的方案有很多種,在unity能夠支持c#熱更后,甚至有將配表數(shù)據(jù)保存為C#代碼,從而實(shí)現(xiàn)而小的內(nèi)存,更快的加載。
但使用數(shù)據(jù)驅(qū)動(dòng)的目的是,在盡量少改動(dòng)代碼的情況,實(shí)現(xiàn)更多的游戲內(nèi)容。實(shí)現(xiàn)一個(gè)數(shù)據(jù)驅(qū)動(dòng)的關(guān)卡,等于實(shí)現(xiàn)了無數(shù)個(gè)數(shù)據(jù)驅(qū)動(dòng)的關(guān)卡。
因此,數(shù)據(jù)驅(qū)動(dòng)并不意外著不需要增加代碼。