1.概覽
uFrame是提供給Unity3D開發者使用的一個框架插件,它本身模仿了MVVM這種架構模式(事實上並不包含Model部分,且多出了Controller部分)。因為用於Unity3D,所以它向開發者提供了一套基於Editor的可視化編輯工具,可以用來管理代碼結構等。本文為uFrame1.6版本在項目中實踐的記錄,主要包括一些uFrame中的基本概念以及應用的流程。
2.新建uFrame工程
本小節主要內容包括:
- 在uFrame新建工程
- 在uFrame的可視化編輯器中打開工程倉庫
- 在uFrame的可視化編輯器中設置工程的命名空間,用來在生成模板代碼時使用
2.1.在uFrame中新建工程
在Unity編輯器的Project部分新建一個文件夾,命名為MyProject。選中剛剛創建的文件夾右鍵選擇:
[u]Frame->New Project。
如圖:
此時,打開MyProject文件夾,我們創建的uFrame的工程倉庫已經創建好了。
我們可以對這個文件進行重命名,以符合自己的習慣。
到此,我們就完成了在uFrame中創建一個新的工程的任務。
2.2.在uFrame的可視化編輯器中打開工程倉庫
創建完uFrame的工程之后,我們就可以在uFrame提供的可視化編輯器(graph designer)中打開該工程了。
點擊Editor的工具欄,選中Window->uFrame Designer:
在uFrame的編輯器中,我們可以選擇我們剛剛創建的uFrame工程。
這樣,我們就在uFrame的編輯器中打開了剛剛創建的uFrame工程了。
2.3.設置工程的命名空間
由於uFrame的這套可視化編輯器的目的是為了向開發人員提供便利的開發方式,其最后還是要生成一些模板代碼的。因此,我們可以設置一些信息,以生成對應的模板代碼。例如,我們可以在這里設置工程的命名空間,這樣生成的代碼都會在我們設置的命名空間內。
選中在2.1中生成的工程倉庫文件,我們在它的inspector面板中可以設置這個工程的命名空間。
至此,整個工程的基本設置就已經完成了,下面我們繼續進一步進行一些具體的操作。
3.創建子系統
本小節主要內容包括:
- 介紹uFrame中圖(Graph)的概念
- 創建一個MVVM圖(MVVM Graph)
- 創建一個子系統圖(Subsystem Graph)
3.1.uFrame中的圖(graph)
在創建子系統之前,我們首先要了解一個概念,即uFrame中的圖(Graph)。此處說的圖是uFrame中的一個概念,uFrame工程中的每一個圖都會以文件的形式存在於工程的文件夾中。每一個圖都可以包含很多的結點(Node),而且圖和圖之間也可以共享同一個工程中的節點。
我們可以通過uFrame的可視化編輯器(designer)來創建一個圖,在designer的左側我們可以打開圖的選擇框:
選擇框中列出的是可以創建的圖的類型。
需要我們注意的是,此時創建的圖會自動和此時選中的工程鏈接,且圖文件會在被選中的工程的文件夾中創建。
3.2.創建MVVM圖
此時,我們需要為我們的工程創建一個MVVM圖,所以在上面的圖的選擇框中我們選擇Create MVVMGraph。
我們可以看到創建完之后,這個圖只包括一個節點(Node),該節點代表圖本身,我們可以稱它為圖節點(Graph node)。
而且,一個圖文件也在我們的工程文件夾中被創建了出來。
如果需要修改圖的名字,我們可以直接在designer中修改圖節點的名字,右鍵點擊節點,選擇Rename即可。
3.3.創建子系統圖
下面就讓我們在MVVM圖之下添加一些子系統,來豐富這個工程的功能吧。
我們只需要在空白處點擊右鍵,即可彈出一個選擇菜單:
選擇Add Sub System即可在FoxMain環境中添加一個子系統了。
注意:此處需要提醒各位注意,不同的環境下選擇菜單的內容是不同的,可添加的元素也不同,例如在此處的MVVM Kernel圖中我們可以創建SubSystem,而Element節點只能在SubSystem中創建,同樣,View節點只能在Element節點中創建。所以想要創建目標節點時,一定要確定現在的環境(可以通過左上角看到當前所在的環境,例如現在是FoxMain)。
4.創建節點(Node)
本小節主要內容包括:
- 解釋什么是Element節點並創建Element節點
- 解釋什么是View節點並創建View節點
4.1.Element節點
在designer中,Element節點主要定義了ViewModel和Controller,Element中的數據主要有三部分組成:
- 屬性Property,主要是單個數據
- 集合Collection,主要是數據集合
- 命令Command,主要定義了一些命令,由Controller執行。
由於它們是常規的C#類型,並沒有繼承Unity3D中的Monobehaviour,因此它們不依賴Unity3D,所以它們是可移植的。
而在Unity3D中,我們通過創建和Unity3D相關的View來綁定ViewModel,從而表現ViewModel中的數據。
下面我們就在剛剛創建的UISys子系統中創建一個Element節點,並命名為Login。
右鍵點擊designer的空白處,可以彈出一個選擇菜單,其中包括很多Add選項,例如Command、Element等等。選擇Add Element,一個名為Login的Element節點便被創建出來了。
注意:觀察designer的左上角,可以看到我們此時處在UISys中,即我們現在在UISys圖(graph)中。之所以要在此提示各位注意這一點,是由於節點可以以子系統的圖節點為目標添加,也可以以別的節點為目標添加,如果我們雙擊Login節點,就變成了以Login節點為目標添加。
4.2.View節點
在Unity3D開發中,View部分指的就是Unity3D為我們提供的視覺方面的操作對象,例如游戲內的物體、UI等等。
View是展示層,它通過綁定ViewModel來展示ViewModel中的數據。舉一個例子各位可能會更容易理解這個意思:假設我們的游戲中有一個PlayerViewModel,針對這一個ViewModel我們在游戲中可以有多種表現方式,例如:我們可以有一個PlayerView對應游戲中的玩家模型,根據ViewModel中的數據展示各種動作、或者位移。也可以有一個PlayerInfoView對應游戲中的玩家數據UI,根據同一個ViewModel中的數據,展現例如玩家血量、經驗值等等信息。
而綁定了同一個ViewModel的多個View的不同之處就在於,各個View只關注ViewModel上它們所需要的數據,各個View之間也應該盡可能的保持獨立性。
那么下面我們就來創建一個View節點。
雙擊Login節點進入以Login為目標的環境,和創建Element節點的過程類似,右鍵點擊空白處彈出選擇菜單,這次菜單中包括Add View的選項,如下圖:
(我們還可以看到左上角已經從之前的UISys變成了現在的Login)
這樣,一個View節點便被創建出來了。
現在分別代表ViewModel和View的節點已經被創建出來了,接下來我們就要創建ViewModel上的數據了。