MVC框架在很多專案當中擁有廣泛的應用,很多時候做專案前人開坑開了一半就消失了,後人為了填補各種的坑就遭殃的不得了。嘛,程式猿大家都不喜歡像文案策劃一樣組織文字寫東西,也不喜歡看別人留下不清不楚的文件,還不如看程式碼來得實在。剛開始新人看程式碼是看得頭暈,因為這樣那樣的東西不一定能完全猜得透。而老人家就算有經驗和閱歷,也沒有這麼多的體力去看一個龐大而又複雜的糟糕專案。因為這種需求,Unity3D的程式猿就統一組織起來,想做一個完整規範的程式框架,而這時,PureMVC就誕生了。我個人喜歡PureMVC的原因也很簡單,因為它簡單粗暴,和Unity3D之間沒有依賴性,加上又開源,真的遇到Bug能拿到原始碼來除錯也是很容易執行的。Unity3D應用商店還有一個同類產品叫uFrame Game Framework,它對Unity版本有著依賴,拖檢視雖然方便,但是一旦出bug真的改得夠嗆的,所以不推薦使用它。下文便是使用PureMVC和Unity3D的UGUI製作一個簡單的員工管理系統例項。
[RequireComponent(typeof(ToggleGroup))]public class UGUI_MyToggleGroup : MonoBehaviour{ public ToggleGroup toggleGroup; public ToggleEvent onToggleChange = new ToggleEvent();
PureMVC和Unity3D的UGUI製作一個簡單的員工管理系統例項執行例項演示.png
前言:
1.關於PureMVC:MVC框架在很多專案當中擁有廣泛的應用,很多時候做專案前人開坑開了一半就消失了,後人為了填補各種的坑就遭殃的不得了。嘛,程式猿大家都不喜歡像文案策劃一樣組織文字寫東西,也不喜歡看別人留下不清不楚的文件,還不如看程式碼來得實在。剛開始新人看程式碼是看得頭暈,因為這樣那樣的東西不一定能完全猜得透。而老人家就算有經驗和閱歷,也沒有這麼多的體力去看一個龐大而又複雜的糟糕專案。因為這種需求,Unity3D的程式猿就統一組織起來,想做一個完整規範的程式框架,而這時,PureMVC就誕生了。我個人喜歡PureMVC的原因也很簡單,因為它簡單粗暴,和Unity3D之間沒有依賴性,加上又開源,真的遇到Bug能拿到原始碼來除錯也是很容易執行的。Unity3D應用商店還有一個同類產品叫uFrame Game Framework,它對Unity版本有著依賴,拖檢視雖然方便,但是一旦出bug真的改得夠嗆的,所以不推薦使用它。下文便是使用PureMVC和Unity3D的UGUI製作一個簡單的員工管理系統例項。
2.透過MVC模式在Unity專案當中應用的特別提醒:(1)Unity3D是基於元件設計的,如果沒有好的規劃,元件之間會產生複雜的呼叫關係,導致元件之間複雜的依賴,從而破壞了整個系統結構,因此需要設計時確定元件的層次關係,確保依賴關係只存在於下層對上層。而這個是業務邏輯設計問題,PureMVC幫不了你。(2)僅僅用上MVC,解決不了什麼問題,或許解決了1%,剩下的99%就被挪到了MVC的C裡,當你慶祝MVC竣工時,99%的問題在那裡默默的微笑的看著你。(話說以前寫PHP的CI框架時候,一堆東西扔到XxxAction.Class.php裡面,發現和擺的亂七八糟的架構沒區別,只是大家都習慣了這套框架的規矩,看程式碼找某個東西稍微好找而已,本質上還是考驗基本功和對專案的熟悉程度的,23333)
3.PureMVC透過4種pattern實現隔離變化:(1)facade非常適合將UI介面對遊戲資料的依賴解耦,將UI操作資料的請求封裝在facade 接口裡面,同時資料變化對UI的影響可以透過notification事件通知來實現,該模式應用得非常常見。(2)command模式統一對物件的操作,將鍵盤輸入,網路輸入輸出統一成command來操控遊戲物件。(3)proxy維護資料,提供某塊資料統一的初始化,訪問和修改介面。(4)mediator沒怎麼用過,我們的遊戲中的UI介面每次變化一般都是整體更新的,不常用區域性更新。以上4中pattern請務必牢牢記住,請務必牢牢記住,請務必牢牢記住。重要的事情要說3便。
4.PureMVC的流程示意圖(1)在puremvc中,model/view/controller統一是由Facade類的單件例項來統籌管理的。(2)PureMVC的基本流程:啟動PureMVC—>建立Mediator來操作視覺元素(按鈕與文字框)—>點選按鈕傳送Notification->文字框接收Notification改變內容。(3)大致流程可理解為:透過Facade類的單件例項(即:統一的門面) 啟動 puremvc環境,啟動同時註冊Command物件(相當於asp.net mvc中的controller),然後Command透過與之關聯的facade(即前面的單件例項)來註冊Mediator(中介者:用於把View與Command聯絡起來)。(4)當UI介面(即View)上有動靜時(比如按鈕點選了之類),與之關聯的Mediator(中介者)會發送通知給facade,然後facade會呼叫command物件執行相關的處理。(即:訊息響應)
PureMVC示意圖.png一.引入PureMVC的外掛
1.下載PureMVC請訪問地址https://github.com/PureMVC/puremvc-csharp-standard-framework/wiki
安裝2.把PureMVC.DotNET.35.dll放到Plugins裡面就好了。
QA3.這裡有一個很簡單的基本案例可以參考一下http://www.open-open.com/lib/view/open1452657515480.html
二.動手配置檔案
1.需要完成的例項如下:實現的介面效果.png2.具體實現的目標:(1)在Scripts資料夾下,分別設定模型、檢視、控制器對應的資料夾Model、View、Controller,分別放置處理資料模型的指令碼、處理顯示檢視的指令碼、處理邏輯控制的指令碼。(2)如介面,一個Unity3D和UGUI製作的簡單員工管理系統,Employee Admin,其中員工介面Users顯示有哪些員工在登記範圍內,而New和Delete分別是新增和刪除某個員工的資訊。然後下面的員工資訊介面User Profile則是對員工資訊的一個具體編輯和修正。
三.主要實現步驟
1.啟動檔案AppFacade.cs 作為PureMVC框架的入口檔案。2.對PureMVC需要處理的事件用EventsEnum.cs存放3.然後在Unity的場景中建立一個MainUI.cs檔案,掛在需要啟動PureMVC的元件上。就可以啟動了。4.對Controller部分進行處理然後我們對執行邏輯的處理事件進行補充。新建一個資料夾Controller,暫時先放置StartupCommand.cs和DeleteUserCommand.cs。處理上述所說的邏輯事件首先,處理啟動事件
5.對Model部分進行處理然後是對Model模型資料的定義哈,首先要記錄的資訊用UserVO來表示
接著對操作資料的UserProxy進行補充
6.接下來對VIew部分進行實現顯示使用者介面列表的UserList和填寫使用者具體資訊的UserForm列表單條資料部分
使用者列表部分
使用者個人資訊部分
最後,對區域性更新UI的行為進行完善Mediator
補充,UI的選擇部分
//[lzh]using UnityEngine;using UnityEngine.UI;using UnityEngine.Events;using System.Collections;
public class ToggleEvent : UnityEvent<Toggle> { }
[RequireComponent(typeof(ToggleGroup))]public class UGUI_MyToggleGroup : MonoBehaviour{ public ToggleGroup toggleGroup; public ToggleEvent onToggleChange = new ToggleEvent();
}