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
cocone Teck Talk Vol.2 - Singletonを使わないUnityを用いたApplication開発
Search
cocone
August 17, 2021
Programming
0
2k
cocone Teck Talk Vol.2 - Singletonを使わないUnityを用いたApplication開発
Singletonは便利なんだけどあまり使いたくない… そんなあなたにSingletonを使用せずに実装されたApplicationの考え方や設計などを紹介します。
cocone
August 17, 2021
Tweet
Share
More Decks by cocone
See All by cocone
20240301_cocone_EMゆるミートアップvol6_LT資料
cocone
0
420
2024_cocone-avatarservice.pdf
cocone
0
1.1k
2024_cocone-wellbeing
cocone
0
3.3k
2023夏季合同企業説明会ココネ
cocone
0
170
cocone TECH TALK Vol.6 - リアルタイム対戦xバックエンドアーキテクチャ
cocone
0
400
cocone TECH TALK Vol.6 - ココネグループのブロックチェーン MOOI Network とのバックエンド連携
cocone
0
320
cocone TECH TALK Vol.6 - Kotlin バックエンドアーキテクチャ of アバターサービス
cocone
0
340
ココネ株式会社 会社紹介
cocone
0
120k
cocone corporation(JPN)Letter for Designer
cocone
0
640
Other Decks in Programming
See All in Programming
Webアプリをできるだけコードを手書きしないで作ってみる
tomokusaba
2
190
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
9
4.3k
Next.js App Router
quramy
12
2k
Introducing Kotlin Multiplatform in an existing mobile app - Workshop Edition | AndroidMakers Paris
prof18
0
160
Git Lint
bkuhlmann
4
760
Going beyond Apache Parquet's default settings
xhochy
0
140
Implementing Design Systems in Swift
seyfoyun
2
490
検証も兼ねて個人開発でHonoとかと向き合った話
hanetsuki
1
1.4k
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
4
1k
WebGLで始める コンピュータグラフィックス入門
heller77
0
330
Balkan Ruby 2024 — How and why to run SQLite on Rails in production
fractaledmind
0
100
PHPはいつから死んでいるかの調査
chiroruxx
2
420
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
649
58k
Bash Introduction
62gerente
605
210k
Writing Fast Ruby
sferik
622
60k
Rebuilding a faster, lazier Slack
samanthasiow
74
8.3k
The Language of Interfaces
destraynor
151
23k
Fireside Chat
paigeccino
22
2.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
21
1.6k
The Pragmatic Product Professional
lauravandoore
26
5.8k
Robots, Beer and Maslow
schacon
PRO
155
7.9k
The World Runs on Bad Software
bkeepers
PRO
61
6.7k
Ruby is Unlike a Banana
tanoku
96
10k
Gamification - CAS2011
davidbonilla
77
4.6k
Transcript
Singletonを使わない Unityを用いたApplication開発 ポケコロツイン事例紹介
自己紹介 堀尾 大地 • ポケコロツイン clientエンジニア 職務経歴 • 株式会社Aiming(約5年) •
株式会社インディゴゲームスタジオ(約 1年) • cocone株式会社 <= イマココ 趣味 • ゲーム • youtubeでhololiveの配信を見る • 欅坂46/櫻坂46
目次 1. Singletonを使いたくない理由 2. ポケコロツインの実装紹介 3. まとめ
Singletonを 使いたくない理由
Unityを使ってApplicationを作る • UnityがSceneを起点としている • アプリやチームの規模が大きくなってくると複数のSceneができる • Scene間でデータのやり取りをする仕組みが欲しくなる
Unityを使ってApplicationを作る • UnityがSceneを起点としている • アプリやチームの規模が大きくなってくると複数のSceneができる • Scene間でデータのやり取りをする仕組みが欲しくなる ↓ そうだ、Singletonを使おう。
Singletonが手っ取り早くて実装も簡単…だけど? • Scene間のやり取りのために作ったのにどこからでも呼べる便利クラス化 • ボタン押したらボタン制御クラスが急にSingletonを呼び出したりしてこれどうやって 動いてるんだ…?ってなる • Singletonを1個作るとどんどん生まれる(割れ窓) • 複数のSingleton同士が依存しあって初期化を変えると全部死ぬ、処理が追えなく
なる
Singletonが手っ取り早くて実装も簡単…だけど? • Scene間のやり取りのために作ったのにどこからでも呼べる便利クラス化 • ボタン押したらボタン制御クラスが急にSingletonを呼び出したりしてこれどうやって 動いてるんだ…?ってなる • Singletonを1個作るとどんどん生まれる(割れ窓) • 複数のSingleton同士が依存しあって初期化を変えると全部死ぬ、処理が追えなく
なる ↓ 管理コスト高くない?
結局使う人による • 使用ルールを作って必要最低限だけをSingletonでカバーするとかなら全然いいと 思う • 人の入れ替わりが起こる運営型のProjectでずっと保守できる?
結局使う人による • 使用ルールを作って必要最低限だけをSingletonでカバーするとかなら全然いいと 思う • 人の入れ替わりが起こる運営型のProjectでずっと保守できる? ↓ やりたくない (できる or
できない ではない)
話をもとに戻します 論点はSingletonを使うか使わないか、どう使うかではなく Scene間のデータのやり取りをスムーズに行いたいだけ
話をもとに戻します 論点はSingletonを使うか使わないか、どう使うかではなく Scene間のデータのやり取りをスムーズに行いたいだけ ↓ SceneLoad時に必要な情報をScene側に 良い感じに渡せれば良いだけ!!!!!
ポケコロツインの 実装紹介
Scene C ざっくりとしたイメージ ApplicationManager (MonoBehaviour) Scene B ApplicationManagerで共有で使う インスタンスを初期化しておいて Load時に各Sceneに渡す
Scene A ApplicationOperator (c# class)
ApplicationManagerの役割 1. 起点となるSceneに設置されたGameObjectにAttachしApplicationのエントリポイ ントとなる 2. 初期化時にGameObjectをDontDestroy 3. Operatorを初期化してインスタンスを保持する
ApplicationOperatorの役割 1. 共通で使うインスタンスの初期化と保持 2. インスタンス同士の依存などを解決 共通で使う処理の例 Scene、UI、通信、AssetBundle、Sound、Localデータ、設定データ、ユーザーデータ…など…
SceneClassの定義 こんな感じのclassを継承して各Sceneに配置したGameObjectにAttachしておく
SceneのLoad
まとめ
良かった点 • Singletonを使わずにScene間のやり取りを実現でき た!!!!!! • インスタンスの使用スコープを絞ることが出来る • エントリポイントが明確なので処理が追いやすい • 再利用性が高い
悪い点(?) • 学習コストが高め • 雑にApplicationManager側に処理を作られる
結局、最終的には人をどうやって教育するかになりますね…
ご清聴ありがとうございました。