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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
mattak
July 23, 2016
Programming
550
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
UniduxIntroduction
2016-07-23 Unibook & LT conference.
mattak
July 23, 2016
More Decks by mattak
See All by mattak
人間はどこまでさぼれるか? AIコーディングで人の関与を計測してみた
mattak
0
6
最近やった作業環境改善施策10個
mattak
0
300
UnixTime is Simple
mattak
0
260
おっさんが停滞しないために
mattak
32
18k
tech invest
mattak
1
370
Nodux - node base redux framework
mattak
0
1.6k
what_is_technical_investment
mattak
0
180
unitypackage distribution
mattak
0
890
Unity energy usage
mattak
0
980
Other Decks in Programming
See All in Programming
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
740
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
160
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
130
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
5.6k
OSもどきOS
arkw
0
560
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
10
4k
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
540
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
120
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
140
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
260
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
150
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
200
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
Being A Developer After 40
akosma
91
590k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
Mobile First: as difficult as doing things right
swwweet
225
10k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
200
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Test your architecture with Archunit
thirion
1
2.3k
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