2016年6月13日星期一

[Unity3D] uFrame裏修改ViewModel的各種方法


uFrame是根據MVVM的結構的,而當中的ViewModel是負責每一個MVVM的物件的變數(properties),如果大家不淸楚的話可以先到這裏了解一下:http://isaacforfun.blogspot.hk/2015/06/uframeflappy-brid.html



遊戲中,我們不時需要修改物件的變數,例如血量,狀況(State)等,而uFrame的結構,這是建議直接在Controller中修改變數的,但小弟有時想在View的腳本中修改ViewModel的數值,原來是可以的,但當中有它的限制,所以就在這裏列出小弟用過修改ViewModel的方法:


1. 直接在Inspector中修改




在你建立的MVVM物件中,在Inspector會顥示你建立的ViewModel的各種數值,你可以直接在這裏修改你的數值,但有兩點需要注意:
i. 記得把 Initialize ViewModel打勾,不然不會出現View Model Properties給你修改
ii. 顧名思義,這只用於初始化數據


2. 在Controller代碼中修改


我們用修改血量(Health)作例子,我們首先在uFrame Designer的介紹面,在Controller中建立ChangeHealth,然後在Controller腳本中就會有

public override void ChangeHealth(EntityViewModel viewModel)

這個功能(Function),然後在這裏用 viewModel.Health 就可以修改數值了。

viewModel.Health = the_value

另外,uFrame有一個很方便的功能,就是可以在View腳本中用

executeChangeHealth();
就可以呼叫Controller腳本中ChangeHealth這功能,但記得在在uFrame Designer的介紹面,在View介面,Binding下加入Health Change這個功能(如上圖)

3. 在View代碼中修改

承上,在 View 的腳本中直接修改

this.Entity.Health
就可以修改Enitty中ViewModel的Health的數值,但有一點需要注意的,就是在View 代碼,在

protected override void InitializeViewModel(uFrame.MVVM.ViewModel model)

是不能用this.Entity.Health修改,


以下方法不能在View修改ViewModel

View腳本中有兩段代碼好像可以修改ViewModel的數據但其實是不能的,它們分別是:

this.Entity.HealthProperty
this._Health

前者是指ViewModel的observable Health Property,後者是指View 腳本中的local value,它們是不能修改ViewModel的數據,請留意喔,而且小也被告之 this._Health這個千萭不要用,因為ViewModel的數值才是唯一有真實數值,你改了 this._Health是沒意思的!

沒有留言:

發佈留言