tonari note

オンラインゲームエンジニアの雑記

UniVM

知人が双方向バインディングしたいっていうのでuGUI向けに作りました。
まだUnityEngine.UI.Text⇔stringの部分しかないですが後は根気で。


yKimisaki/UniVM · GitHub

一応簡単なサンプルつけてます。

f:id:ykimisaki:20141026034934j:plain

まず、UI作って、CanvasにView Rootをくっつけます。

f:id:ykimisaki:20141026034746j:plain

Textオブジェクトを作り、Text Bindingをくっつけます。
下のPathにはバインド先のプロパティ名を付けてください。

次にスクリプトを書きます。

using UnityEngine;
using UniVM;

public class SampleContext : Context
{
	public StringProperty SampleText { get; set; }

	public SampleContext()
	{
		SampleText = new StringProperty();
	}
}

public class SampleViewModel : MonoBehaviour
{
	public ViewRoot View;
	public SampleContext Context;

	void Awake()
	{
		Context = new SampleContext();
		View.Context = Context;
	}

	void Update()
	{
		Context.SampleText.Value = "FUN for ALL, ALL for FUN.";
	}
}

必要なのは、ContextとViewModelです。
SampleContextには、String型のプロパティを作成し、その名前をさっきのTextBindingのPathで指定した名前にしてやります。

次にViewModelのAwakeで、ViewRootとContextを繋いでやります。
これでViewとModelがつながれます。

最後にあとは自由にContextにあるプロパティをいじってやります。
そうするとバインド先のViewが変わります。

f:id:ykimisaki:20141026035600j:plain

あとは空のGameObjectを作り、さっきのViewModelのスクリプトを貼り付け、バインド先のViewを放り込みます。

そんな感じで以上です!