Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
UniduxIntroduction
Search
mattak
July 23, 2016
Programming
1
490
UniduxIntroduction
2016-07-23 Unibook & LT conference.
mattak
July 23, 2016
Tweet
Share
More Decks by mattak
See All by mattak
最近やった作業環境改善施策10個
mattak
0
240
UnixTime is Simple
mattak
0
160
おっさんが停滞しないために
mattak
32
18k
tech invest
mattak
1
300
Nodux - node base redux framework
mattak
0
1.4k
what_is_technical_investment
mattak
0
120
unitypackage distribution
mattak
0
760
Unity energy usage
mattak
0
840
Unidux 0.3.1
mattak
1
360
Other Decks in Programming
See All in Programming
C#/.NETのこれまでのふりかえり
tomokusaba
1
160
現場で役立つモデリング 超入門
masuda220
PRO
13
2.9k
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
2
210
Realtime API 入門
riofujimon
0
110
Vitest Browser Mode への期待 / Vitest Browser Mode
odanado
PRO
2
1.7k
PagerDuty を軸にした On-Call 構築と運用課題の解決 / PagerDuty Japan Community Meetup 4
horimislime
1
110
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
9
1k
Identifying User Idenity
moro
6
7.8k
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
7
2.8k
Vue SFCのtemplateでTypeScriptの型を活用しよう
tsukkee
3
1.5k
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
430
ECSのサービス間通信 4つの方法を比較する 〜Canary,Blue/Greenも添えて〜
tkikuc
11
2.3k
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
404
65k
Teambox: Starting and Learning
jrom
132
8.7k
Done Done
chrislema
181
16k
YesSQL, Process and Tooling at Scale
rocio
167
14k
A Tale of Four Properties
chriscoyier
156
23k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Music & Morning Musume
bryan
46
6.1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
14
1.9k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
The Art of Programming - Codeland 2020
erikaheidi
51
13k
Writing Fast Ruby
sferik
626
61k
Transcript
6OJUZͰ6*࡞Δ࣌ͷ ΞʔΩςΫνϟ UnibookৼΓฦΓʴՆͷLTେձʂ 2016-07-23 @mattak 1
ࣗݾհ 2
3 ID: @mattak 位置ゲームエンジニア Unity⼒: にわか github.com/mattak/ qiita.com/mattak@github
ಥવͰ͕͢ɺ 4
6*࡞Δͱ͖ʹ ͲΜͳײ͡Ͱ ίʔυॻ͍ͯ·͢ʁ 5
6* 6 Tab切り替え 数値の反映 Collectionの表⺬ Gauge表⺬ ViewのOn/OFF …
͜Μͳײ͡ͷ6*͕ ૿͍͑ͯ͘ͱ ίʔσΟϯάϧʔϧʹ ࠔΔɻɻɻ 7
ίʔσΟϯάϧʔϧ ඞཁʁ 8 規模⼩/短期/1⼈/メンテなしの場合 - コーディングルールがなくても成⽴ 規模⼤/⻑期/複数⼈/メンテありの場合 - コーディングルールがないとやってられない
ௐͯΈͨ 9 https://speakerdeck.com/mattak/application-architecture-for-unity-ui
݁Ռ 10 UnityでUI周りのアーキテクチャ考えてる事例少なそう ↓ UnityのUIアーキテクチャを考えて ライブラリにしました
11 github.com/mattak/Unidux
3FEVYΞʔΩςΫνϟ Λࢀߟʹ͠·ͨ͠ 12
ελʔΊ͙ΜͰ ͍ͩ͘͞ 13 github.com/mattak/Unidux
؆୯ʹ ϥΠϒϥϦͷઆ໌ 14
ཁૉͷؔ 15
16 GameObject Action Reducer State Dispatcher(ActionCreator) Renderer(View)
17 GameObject Event情報 状態更新ロジック 状態 Event発⽕者 Viewの変化
$PPLJF$MJDLFSͷྫ 18
19 GameObject +1 count = count+1 count Button押下 text =
count
-JTU7JFXͷྫ 20
21 GameObject {name:”poppo”} List.Add( {name:”poppo”} ) List Start() ListView更新
࣮ྫ 22
23 ActionCreator、Renderer、Uniduxを配置
"DUJPO 24 public enum CountAction { Increment, Decrement }
4UBUF 25 public class State : StateBase<State> { public int
Count { get; set; } }
"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)); } }
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; } }
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(); } }
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 github.com/mattak/Unidux
Կ͕͏Ε͍͠ʁ 31
32 特徴 - クラス間が疎結合になる (メンテ, テスト容易に) - 記述ルールが統⼀される - 状態がStateに集約される
(記録、デバック容易に) - イベントサイクルが⼀⽅向 (可読性アップ) デメリット - 単純なものの記述量が少し増える - 短期書きなぐり系には冗⻑ (ゲームジャムとか)
ήʔϜδϟϜͰ ͍͍ײ͡ʹ ίʔυॻ͖͍ͨɾɾɾ 33
34 github.com/mattak/Unibus
35 - ObserverPatternを気軽に書けるライブラリ - AndroidのEventBusに相当 - Uniduxのイベント通知部分だけほしい Unibus
36 Bus.Instance.Dispatch("message"); イベント送信 イベント受信 void OnEvent(string message) { var text
= this.GetComponent<Text>(); text.text = message; }
ͬͪ͜ ελʔΊ͙ΜͰ ͍ͩ͘͞ 37 github.com/mattak/Unibus
·ͱΊ 38 github.com/mattak/Unidux スター恵んでください よろしくおねがいします github.com/mattak/Unibus
Ҏ্Ͱ͢ɻ ͋Γ͕ͱ͏ ͍͟͝·ͨ͠ʂʂ 39