facebook twitter hatena line email

「Unity/MVP」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
 
(同じ利用者による、間の4版が非表示)
行1: 行1:
==MVPとは==
+
[[Unity/MVP/Helloworld]]
MV(R)Pで、ModelとViewとPresenterをReactiveで、疎結合に連携したパターン
+
  
==準備==
+
[[Unity/MVP/値変更を自動でViewへ適用]]
# UniRxをインストールしておく。
+
 
+
[[Unity/UniRx]] [ショートカット]
+
 
+
==サンプル==
+
CounterModel.cs
+
<pre>
+
public class CounterModel
+
{
+
    public int Counter {
+
        get => counter;
+
        set => counter = value;
+
    }
+
    int counter = 0;
+
 
+
    public void PlusCounter()
+
    {
+
        counter++;
+
    }
+
    public void MinusCounter()
+
    {
+
        counter--;
+
    }
+
}
+
</pre>
+
 
+
CounterView.cs
+
<pre>
+
using UnityEngine;
+
using UnityEngine.UI;
+
 
+
public class CounterView : MonoBehaviour
+
{
+
    [SerializeField] public Button minusButton, plusButton;
+
    [SerializeField] public Text text;
+
 
+
    public void SetValueText(float value)
+
    {
+
        text.text = value.ToString();
+
    }
+
}
+
</pre>
+
 
+
CounterPresenter.cs
+
<pre>
+
using UnityEngine;
+
using UniRx;
+
 
+
public class CounterPresenter : MonoBehaviour
+
{
+
    [SerializeField] private CounterView _counterView;
+
    private CounterModel _counterModel;
+
 
+
    void Start()
+
    {
+
        _counterModel = new CounterModel();
+
        _counterView.SetValueText(_counterModel.Counter);
+
 
+
        _counterView.plusButton
+
            .OnClickAsObservable()
+
            .Subscribe(_ => {
+
                _counterModel.PlusCounter();
+
                _counterView.SetValueText(_counterModel.Counter);
+
            })
+
            .AddTo(this);
+
 
+
        _counterView.minusButton
+
            .OnClickAsObservable()
+
            .Subscribe(_ => {
+
                _counterModel.MinusCounter();
+
                _counterView.SetValueText(_counterModel.Counter);
+
            })
+
            .AddTo(this);
+
    }
+
    void OnDestroy()
+
    {
+
        Destroy(this);
+
    }
+
}
+
</pre>
+
 
+
==手順==
+
# SampleSceneのヒエラルキーにTextとPlusButtonとMinusButtonを作成する。
+
# ヒエラルキーにGameObjectを作成して、CounterViewと変更する。CounterView.csをAddComponentする。
+
# CounterPresenter.csをMainCanvasにAddComponentする。
+
# CounterViewオブジェクトを選択し、インスペクターのCounterViewの部分にそれぞれのUIをドラッグする。
+
# MainCanvasのCounterPresenterにCounterViewオブジェクトをドラッグする。
+
 
+
==参考==
+
https://qiita.com/OKsaiyowa/items/745c5359682c7baad6bf
+

2021年9月15日 (水) 07:48時点における最新版

Unity/MVP/Helloworld

Unity/MVP/値変更を自動でViewへ適用