|
|
| (同じ利用者による、間の10版が非表示) |
| 行1: |
行1: |
| − | ==MVPとは==
| + | [[Unity/MVP/Helloworld]] |
| − | MV(R)Pで、ModelとViewとPresenterをReactiveで、疎結合に連携したパターン
| + | |
| | | | |
| − | CounterModel.cs
| + | [[Unity/MVP/値変更を自動でViewへ適用]] |
| − | <pre>
| + | |
| − | public class CounterModel
| + | |
| − | {
| + | |
| − | public int Counter {
| + | |
| − | get => counter;
| + | |
| − | set => counter = value;
| + | |
| − | }
| + | |
| − | int counter = 0;
| + | |
| | | | |
| − | public void PlusCounter()
| + | [[Unity/MVP/公式サンプル]] |
| − | {
| + | |
| − | 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;
| + | |
| − | | + | |
| − | void Start()
| + | |
| − | {
| + | |
| − | CounterModel model = new CounterModel();
| + | |
| − | _counterView.SetValueText(model.Counter);
| + | |
| − | | + | |
| − | _counterView.plusButton
| + | |
| − | .OnClickAsObservable()
| + | |
| − | .Subscribe(_ => {
| + | |
| − | model.PlusCounter();
| + | |
| − | _counterView.SetValueText(model.Counter);
| + | |
| − | })
| + | |
| − | .AddTo(this);
| + | |
| − | | + | |
| − | _counterView.minusButton
| + | |
| − | .OnClickAsObservable()
| + | |
| − | .Subscribe(_ => {
| + | |
| − | model.MinusCounter();
| + | |
| − | _counterView.SetValueText(model.Counter);
| + | |
| − | })
| + | |
| − | .AddTo(this);
| + | |
| − | }
| + | |
| − | }
| + | |
| − | </pre>
| + | |
| − | | + | |
| − | ==手順==
| + | |
| − | # SampleSceneのヒエラルキーにTextとPlusButtonとMinusButtonを作成する。
| + | |
| − | # ヒエラルキーにGameObjectを作成して、CounterViewと変更する。CounterView.csをAddComponentする
| + | |
| − | # CounterPresenter.csをMainCanvasにAddComponentする。
| + | |
| − | # CounterViewオブジェクトを選択し、インスペクターのCounterViewの部分にそれぞれのUIをドラッグする。
| + | |
| − | # MainCanvasのCounterPresenterにCounterViewオブジェクトをドラッグする。
| + | |