Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
170
おっさんが停滞しないために
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
770
Unity energy usage
mattak
0
860
Unidux 0.3.1
mattak
1
370
Other Decks in Programming
See All in Programming
DevFest Tokyo 2025 - Flutter のアプリアーキテクチャ現在地点
wasabeef
4
540
PaaSとSaaSの境目で信頼性と開発速度を両立する 〜TROCCO®︎のこれまでとこれから〜
gtnao
6
6.9k
わたしの星のままで一番星になる ~ 出産を機にSIerからEC事業会社に転職した話 ~
kimura_m_29
0
100
Serverless苦闘史
mosh_inc
0
140
CSC305 Lecture 25
javiergs
PRO
0
110
Flutterを言い訳にしない!アプリの使い心地改善テクニック5選🔥
kno3a87
3
390
[JAWS-UG横浜 #76] イケてるアップデートを宇宙いち早く紹介するよ!
maroon1st
0
240
Djangoの開発環境で工夫したこと - pre-commit / DevContainer
hiroki_yod
1
640
デザインパターンで理解するLLMエージェントの作り方 / How to develop an LLM agent using agentic design patterns
rkaga
11
3.2k
Figma Dev Modeで変わる!Flutterの開発体験
watanave
0
3.7k
フロントエンドのディレクトリ構成どうしてる? Feature-Sliced Design 導入体験談
osakatechlab
6
2.9k
第5回日本眼科AI学会総会_AIコンテスト_3位解法
neilsaw
0
130
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
250
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
480
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.8k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Code Review Best Practice
trishagee
64
17k
A designer walks into a library…
pauljervisheath
204
24k
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
Typedesign – Prime Four
hannesfritz
40
2.4k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
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