Upgrade to Pro — share decks privately, control downloads, hide ads and more …

UniduxIntroduction

85d7f0ae00c0cf1092dffcec966e3ae9?s=47 mattak
July 23, 2016

 UniduxIntroduction

2016-07-23 Unibook & LT conference.

85d7f0ae00c0cf1092dffcec966e3ae9?s=128

mattak

July 23, 2016
Tweet

Transcript

  1. 6OJUZͰ6*࡞Δ࣌ͷ ΞʔΩςΫνϟ UnibookৼΓฦΓʴՆͷLTେձʂ 2016-07-23 @mattak 1

  2. ࣗݾ঺հ 2

  3. 3 ID: @mattak 位置ゲームエンジニア Unity⼒: にわか github.com/mattak/ qiita.com/mattak@github

  4. ಥવͰ͕͢ɺ 4

  5. 6*࡞Δͱ͖ʹ ͲΜͳײ͡Ͱ ίʔυॻ͍ͯ·͢ʁ 5

  6. 6* 6 Tab切り替え 数値の反映 Collectionの表⺬ Gauge表⺬ ViewのOn/OFF …

  7. ͜Μͳײ͡ͷ6*͕ ૿͍͑ͯ͘ͱ ίʔσΟϯάϧʔϧʹ ࠔΔɻɻɻ 7

  8. ίʔσΟϯάϧʔϧ ͸ඞཁʁ 8 規模⼩/短期/1⼈/メンテなしの場合 - コーディングルールがなくても成⽴ 規模⼤/⻑期/複数⼈/メンテありの場合 - コーディングルールがないとやってられない

  9. ௐ΂ͯΈͨ 9 https://speakerdeck.com/mattak/application-architecture-for-unity-ui

  10. ݁Ռ 10 UnityでUI周りのアーキテクチャ考えてる事例少なそう ↓ UnityのUIアーキテクチャを考えて ライブラリにしました

  11. 11 github.com/mattak/Unidux

  12. 3FEVYΞʔΩςΫνϟ Λࢀߟʹ͠·ͨ͠ 12

  13. ελʔΊ͙ΜͰ ͍ͩ͘͞ 13 github.com/mattak/Unidux

  14. ؆୯ʹ ϥΠϒϥϦͷઆ໌ 14

  15. ཁૉͷؔ܎ 15

  16. 16 GameObject Action Reducer State Dispatcher(ActionCreator) Renderer(View)

  17. 17 GameObject Event情報 状態更新ロジック 状態 Event発⽕者 Viewの変化

  18. $PPLJF$MJDLFSͷྫ 18

  19. 19 GameObject +1 count = count+1 count Button押下 text =

    count
  20. -JTU7JFXͷྫ 20

  21. 21 GameObject {name:”poppo”} List.Add( {name:”poppo”} ) List Start() ListView更新

  22. ࣮૷ྫ 22

  23. 23 ActionCreator、Renderer、Uniduxを配置

  24. "DUJPO 24 public enum CountAction
 {
 Increment,
 Decrement
 }

  25. 4UBUF 25 public class State : StateBase<State>
 {
 public int

    Count { get; set; }
 }
  26. "DUJPO$SFBUPS 26 public class CountDispatcher : MonoBehaviour
 {
 public CountAction

    ActionType = CountAction.Increment;
 
 void Start()
 {
 var button = this.GetComponent<Button>();
 button.onClick.AddListener(() => Unidux.Instance.Store.Dispatch(ActionType));
 }
 }
  27. 3FEVDFS 27 public static class CountReducer
 {
 public static State

    Reduce(State state, CountAction action)
 {
 switch (action)
 {
 case CountAction.Increment:
 state.Count++;
 break;
 case CountAction.Decrement:
 state.Count--;
 break;
 }
 
 return state;
 }
 }
  28. 3FOEFSFS 28 public class CountRenderer : MonoBehaviour
 {
 void OnEnable()


    {
 var store = Unidux.Instance.Store;
 this.AddDisableTo(store, Render);
 Render(store.State);
 }
 
 void Render(State state)
 {
 var text = this.GetComponent<Text>();
 text.text = state.Count.ToString();
 }
 }
  29. 6OJEVYDT 29 public class Unidux : SingletonMonoBehaviour<Unidux>
 {
 private Store<State>

    _store;
 public Store<State> Store
 {
 get
 {
 if (null == _store)
 {
 _store = new Store<State>(new State());
 _store.AddReducer<CountAction>(CountReducer.Reduce);
 }
 return _store;
 }
 }
 
 void Update()
 {
 this.Store.Update();
 }
 }
  30. ৄ͘͠͸ 30 github.com/mattak/Unidux

  31. Կ͕͏Ε͍͠ʁ 31

  32. 32 特徴 - クラス間が疎結合になる (メンテ, テスト容易に) - 記述ルールが統⼀される - 状態がStateに集約される

    (記録、デバック容易に) - イベントサイクルが⼀⽅向 (可読性アップ) デメリット - 単純なものの記述量が少し増える - 短期書きなぐり系には冗⻑ (ゲームジャムとか)
  33. ήʔϜδϟϜͰ΋ ͍͍ײ͡ʹ ίʔυॻ͖͍ͨɾɾɾ 33

  34. 34 github.com/mattak/Unibus

  35. 35 - ObserverPatternを気軽に書けるライブラリ - AndroidのEventBusに相当 - Uniduxのイベント通知部分だけほしい Unibus

  36. 36 Bus.Instance.Dispatch("message"); イベント送信 イベント受信 void OnEvent(string message) { var text

    = this.GetComponent<Text>(); text.text = message; }
  37. ͬͪ͜΋ ελʔΊ͙ΜͰ ͍ͩ͘͞ 37 github.com/mattak/Unibus

  38. ·ͱΊ 38 github.com/mattak/Unidux スター恵んでください よろしくおねがいします github.com/mattak/Unibus

  39. Ҏ্Ͱ͢ɻ ͋Γ͕ͱ͏ ͍͟͝·ͨ͠ʂʂ 39