mvc模式編寫(xiě)代碼 mvc結(jié)構(gòu)?
mvc結(jié)構(gòu)?mvc的全稱(chēng)是模型視圖控制器。在MVC中,m代表模式,v代表視圖,c代表控制器。MVC是一種類(lèi)似于三層的架構(gòu),主要采用封裝(分層)的思想來(lái)降低耦合度,從而使我們的系統(tǒng)更加靈活和可擴(kuò)展。1.
mvc結(jié)構(gòu)?
mvc的全稱(chēng)是模型視圖控制器。在MVC中,m代表模式,v代表視圖,c代表控制器。
MVC是一種類(lèi)似于三層的架構(gòu),主要采用封裝(分層)的思想來(lái)降低耦合度,從而使我們的系統(tǒng)更加靈活和可擴(kuò)展。
1.模型是應(yīng)用程序的主要部分,主要包括業(yè)務(wù)邏輯模塊和數(shù)據(jù)模塊。模型獨(dú)立于數(shù)據(jù)格式,因此一個(gè)模型可以為多個(gè)視圖提供數(shù)據(jù)。因?yàn)閼?yīng)用于模型的代碼只需編寫(xiě)一次就可以被多個(gè)視圖重用,所以減少了代碼重復(fù)。
2.視圖:用戶(hù)交互的界面。在w
mvc代碼是什么?
MVC代碼是軟件工程中的一種軟件擱置模式。
如何在Unity中實(shí)現(xiàn)MVC模式?
在Unity games的開(kāi)發(fā)中,我沒(méi)有 t刻意采用MVC框架,因?yàn)椴幌窬W(wǎng)站開(kāi)發(fā),模型、視圖、控制器在游戲領(lǐng)域還沒(méi)有明確的定義。原因可能是不同游戲類(lèi)型的軟件架構(gòu)可以有很大的不同,游戲中的對(duì)象之間有大量的交互,所以垂直MVC似乎不是很適合。
但一定程度上需要將代碼邏輯分離,這樣可以提高代碼的可維護(hù)性和可重用性。我來(lái)說(shuō)說(shuō)我自己的一些經(jīng)歷。
假設(shè)我們?cè)谧鲆粋€(gè)馬里奧:我會(huì)對(duì)游戲中的人物采用這樣的結(jié)構(gòu)。角色管理器,其作用是包含該角色的控制器并提供黑板[1]??刂破鳎褂每芍赜玫哪P蛠?lái)處理這個(gè)游戲中角色的某個(gè)狀態(tài)的邏輯??芍赜媚P褪且粋€(gè)虛擬的概念,不是父類(lèi)。通常這種模型負(fù)責(zé)一個(gè)特定的功能,可以重用,可以看作是游戲引擎的擴(kuò)展。我將從角色管理器和可重用模型中繼承MonoBehavior,這樣我們可以直觀地知道這個(gè)角色是一個(gè)什么樣的角色,我們可以使用inspector來(lái)調(diào)整模型的參數(shù)。如何將上述架構(gòu)應(yīng)用于馬里奧:作為角色管理器,我們可以使用Refine狀態(tài)機(jī)或行為樹(shù).一個(gè)優(yōu)點(diǎn)是它們都提供了一個(gè) "控制器和很自然。比如精化狀態(tài)機(jī),它的每一個(gè)狀態(tài)都可以看作一個(gè)控制器。行為樹(shù)中的動(dòng)作節(jié)點(diǎn)也可以看作是一個(gè)控制器。
在每個(gè)控制器中,都會(huì)有指向一些可重用模型的指針。比如下圖,Move State可以有一個(gè)Move Motor,專(zhuān)門(mén)用于GameObject的移動(dòng),而Sprite封裝了GameObject的性能,比如動(dòng)畫(huà)、旋轉(zhuǎn)、位置等等。這些可重復(fù)使用的模型通常提供豐富的參數(shù)來(lái)調(diào)整,并可以在不同的游戲中使用。
游戲中的用戶(hù)輸入和消息會(huì)臨時(shí)存儲(chǔ)在角色管理器中的黑板上,供角色管理器決定是否需要更換控制器。比如在Mario中,我按下左鍵,向左移動(dòng)的信息就會(huì)被寫(xiě)入FSM的黑板,然后我通過(guò)FSM s狀態(tài)轉(zhuǎn)換機(jī)制[2]。這樣做的好處是,左邊的信息可以從輸入管理器(圖中未顯示)或敵方AI管理器(圖中未顯示)獲得。這樣,一種類(lèi)型的FSM(如Idle、Move、Jump等。)可以用在所有類(lèi)似的角色上,不管是玩家控制的還是AI控制的。
最終在團(tuán)結(jié)會(huì)是這樣的局面。FSM、Sprite和MoveMotor都是組件,控制器包含在FSM中。雖然上述方案并不嚴(yán)格,但在一定程度上提高了代碼的可重用性和可維護(hù)性。比如現(xiàn)在我基本都是寫(xiě)MoveMotor,Sprite之類(lèi)的模型,新項(xiàng)目扔進(jìn)去就可以用了。將平臺(tái)游戲中常用的MoveState、IdleState、JumpState等狀態(tài)進(jìn)行封裝,留下一些可調(diào)整的參數(shù),比如狀態(tài)之間的轉(zhuǎn)換。
[1]黑板本質(zhì)上是一本字典。[2]原來(lái)的FSM會(huì)把狀態(tài)轉(zhuǎn)換直接放在狀態(tài)中,但這大大降低了狀態(tài)的可重用性。所以可以嘗試用狀態(tài)的變換作為可調(diào)參數(shù)。一些可視化FSM的原理是一樣的,通過(guò)連線(xiàn)把兩個(gè)狀態(tài)聯(lián)系起來(lái),然后定義一些變換。條件。