Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Unityチュートリアルの玉転がしで、設計について考えてみた話
Search
Moosan
August 28, 2019
Programming
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Unityチュートリアルの玉転がしで、設計について考えてみた話
Unityと設計の話
Moosan
August 28, 2019
More Decks by Moosan
See All by Moosan
MessagePackについて調べてみた話
moosan
1
150
Other Decks in Programming
See All in Programming
AmebaブログはKMPから卒業します
kmars0605
0
190
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
32k
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.6k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
220
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.1k
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
Workers Cache を知る
syumai
0
360
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
Featured
See All Featured
How to build a perfect <img>
jonoalderson
1
6.1k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
870
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Designing for Timeless Needs
cassininazir
1
530
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
The Limits of Empathy - UXLibs8
cassininazir
2
720
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
GitHub's CSS Performance
jonrohan
1033
470k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
Transcript
Unityチュートリアルの玉転がしで、 設計についてかんがえてみた話 むーさん
きっかけ 友達「いつも綺麗なコードを心掛けているけど、 Unityやると萎える。」
よくあるやつ(チュートリアルの玉転がし)
関数分けたい 全部FixedUpdateでやってる 関数を分ける
クラスの名前変えたい PlayerController? PlayerMover!
依存度が高い Editorの入力しか受け付けない いろんな入力を同じ方法で受け取れる
インターフェースは利用する側で定義する PlayerがInputに依存している 入力の仕方によって、 依存するものを変えなきゃあいけない いろんな入力を同じ方法で受け取れる
よくあるやつ(チュートリアルの玉転がし)
型安全性が皆無 Playerというタグが存在しなくても、 コンパイルエラーにならない Unityで設定しておかなきゃいけない
汎用性も皆無 プレイヤーじゃないやつもItemをとりたい
Itemが取得されたタイミングがわからない いつItemが取得されたのか Itemが取得されたから何が起こるのか なにもわからない
ちなみにチュートリアルでは 毎フレームItemを全部とってきて 個数をその都度、UIに更新している
こうする Tagの代わりに、IItemGetterという インターフェースを定義する。 これを継承したオブジェクトにぶつ かったとき、そのオブジェクトの コライダーを通知する。
使い方 Itemを継承したクラスにて、 そのアイテムの効果を記述して、 Item.OnGotに登録する。 いろんな効果のItemを作れて便利
デデドン(IObservableってなんだよ)
UniRxでggr Unity用のRxライブラリ C#のRx(リアクティブエクステン ション)がもとになっている Rxとは、Observerパターンが根幹 にある、監視型イベントシステム である UIの構築などにめっちゃ便利!!
試行錯誤の末に
Playerに必要なコンポーネント • PlayerCore • PlayerMover • PlayerInputByKeyBoard • ScoreHolder それぞれは一切依存していないので、
それぞれの部品を好きにつけかえて、 自分だけのプレイヤーを作ることができる
全部自分でつけるの?? 小さいプロジェクトなら自分でやっ てもいいけど、 大規模な開発で、コンポーネントを 一個一個つけるのめんどくさい
Zenjectでggr Unity用の、DIコンテナライブラリ 依存性の注入をする 方法や引き出しを、 大幅に増やしてくれるらしい 最近流行っている(?) テスト書くときも便利
DIコンテナってなに? なにもわからない
結論 • 型安全にしよう 正しくない書き方をしたらコンパイルエラーにしよう • インターフェースを定義しよう 利用の仕方を定義して、汎用性を高くしよう • コンポーネントを細かく分けよう 一つのコンポーネントは一つの役割にしよう