|
|
(同じ利用者による、間の5版が非表示) |
行1: |
行1: |
− | ==MVPとは==
| + | [[Unity/MVP/Helloworld]] |
− | MV(R)Pで、ModelとViewとPresenterをReactiveで、疎結合に連携したパターン
| + | |
| | | |
− | ==準備==
| + | [[Unity/MVP/値変更を自動でViewへ適用]] |
− | # UniRxをインストールしておく。
| + | |
| | | |
− | [[Unity/UniRx]] [ショートカット] | + | [[Unity/MVP/公式サンプル]] |
− | | + | |
− | ==サンプル==
| + | |
− | 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
| + | |