パラメータ作成に際して、一つ問題があります。


これまでスクリプトでマテリル情報を変更するなどして、
コードからデザインに変更を加えていました。

今回、自車パラメータを扱うわけですが、powerやweight などのゲーム中の値を変更すると、
それに応じてオブジェクトのUILabelの値を変更する必要があります。


こうしたデータ・デザインの変更をおのおの独立してやると、コードが非常に煩雑になります。
なんらかの形で、データとデザインを結びつける仕組みが必要です。

UIにNGUIを使っている場合、どうするのが良いかと探してみました。
そこで見つけたのがNDataです。



MVVM (Model-View-ViewModel)
NDATAはMVVMを設計思想に置いています。

MVVM というのは、開発パートをModel,View,ViewModelの3部分に分割してデザインする手法です。


実際には、下のように役割を担います。

Model :ゲームロジック(通常のシーン毎のスクリプト)
View :     NGUI
ViewModel :NData

ViewModelの役割はModelとViewの橋渡しをすることです。
Viewに表示するデータを保持しつつ、ViewからのインプットをModelに反映させます。
データバインディングを用いて保持したデータは自動的にView に反映されます。


MVVMの良いところは、
スクリプト内に目に見えるデザイン変更などは記述せず、
ゲームデータ(ロジック)の更新のみを記述する。
つまり、見た目に関するコードをスクリプトから一切排除してしまいます。

このような方針を採るとコードの見通しが非常に良くなります。

何故良いか?


基本的にゲームロジックの変更はプラットフォームに依存しません。
ところが、マテリアルの変更というのはUnity依存のコードであり、Unity以外の環境だと使えません。

他プラットフォームで上手く動いたコードが自由に使い回せなくなります。


今までの問題点
unity の場合、基本的にデザインはインスペクタで行います。
しかし、インスペクタで初期状態は与えられるのですが、
逐次変更されるデータに対応してデザインを変更する、となると 
スクリプト内でマテリアルにアクセスして、変更する必要がありました。

データの変更とデザインの変更を両方スクリプトに書いていたわけです。

NDATAの役割はデータ・デザインの変更を連動させて、
他方を変更すると、もう一方も自動的に変化する仕組みを作ることです。
これによってスクリプト中からデザイン変更のコードを一掃できます。


すこし堅苦しくなってしまいました。
次回、実際にNDataを適用してみたいと思います。