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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
mattak
July 23, 2016
Programming
540
1
Share
UniduxIntroduction
2016-07-23 Unibook & LT conference.
mattak
July 23, 2016
More Decks by mattak
See All by mattak
最近やった作業環境改善施策10個
mattak
0
300
UnixTime is Simple
mattak
0
250
おっさんが停滞しないために
mattak
32
18k
tech invest
mattak
1
360
Nodux - node base redux framework
mattak
0
1.6k
what_is_technical_investment
mattak
0
170
unitypackage distribution
mattak
0
880
Unity energy usage
mattak
0
970
Unidux 0.3.1
mattak
1
440
Other Decks in Programming
See All in Programming
UIの境界線をデザインする | React Tokyo #15 メイントーク
sasagar
2
410
AI-DLC Deep Dive
yuukiyo
9
5.1k
Claude Codeをカスタムして自分だけのClaude Codeを作ろう
terisuke
0
150
PHP で mp3 プレイヤーを実装しよう
m3m0r7
PRO
0
290
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
4
380
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
210
Surviving Black Friday: 329 billion requests with Falcon!
ioquatix
0
2.3k
PHPでローカル環境用のSSL/TLS証明書を発行することはできるのか? #phpconkagawa
akase244
0
250
Import assertionsが消えた日~ECMAScriptの仕様はどう決まり、なぜ覆るのか~
bicstone
2
160
Symfony AI in Action - SymfonyLive Berlin 2026
chr_hertel
1
110
ハーネスエンジニアリングにどう向き合うか 〜ルールファイルを超えて開発プロセスを設計する〜 / How to approach harness engineering
rkaga
24
16k
[RubyKaigi 2026] Require Hooks
palkan
1
270
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6.1k
Speed Design
sergeychernyshev
33
1.6k
Heart Work Chapter 1 - Part 1
lfama
PRO
6
35k
Paper Plane
katiecoart
PRO
1
49k
Technical Leadership for Architectural Decision Making
baasie
3
350
Building Adaptive Systems
keathley
44
3k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
170
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
190
The browser strikes back
jonoalderson
0
1k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
200
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
170
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
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