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を用い...
Search
cocone
August 17, 2021
Programming
2.7k
0
Share
cocone Teck Talk Vol.2 - Singletonを使わないUnityを用いたApplication開発
Singletonは便利なんだけどあまり使いたくない… そんなあなたにSingletonを使用せずに実装されたApplicationの考え方や設計などを紹介します。
cocone
August 17, 2021
More Decks by cocone
See All by cocone
Cocone_Research_Center_2025.pdf
cocone
0
290
20240301_cocone_EMゆるミートアップvol6_LT資料
cocone
0
930
2024_cocone-wellbeing
cocone
0
5.1k
2023夏季合同企業説明会ココネ
cocone
0
400
cocone TECH TALK Vol.6 - リアルタイム対戦xバックエンドアーキテクチャ
cocone
0
680
cocone TECH TALK Vol.6 - ココネグループのブロックチェーン MOOI Network とのバックエンド連携
cocone
0
590
cocone TECH TALK Vol.6 - Kotlin バックエンドアーキテクチャ of アバターサービス
cocone
0
620
cocone corporation(JPN)/Handbook2022
cocone
1
31k
cocone Tech Talk vol.5 - Unity Dotsを使ってみた
cocone
0
2.5k
Other Decks in Programming
See All in Programming
AIと共に生きる技術選定 2026
sgash708
0
110
Running Swift without an OS
kishikawakatsumi
0
860
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
280
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
1
180
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
230
煩雑なSkills管理をSoC(関心の分離)により解決する――関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / Solving Complex Skills Management Through SoC (Separation of Concerns)
nrslib
4
1k
YJITとZJITにはイカなる違いがあるのか?
nakiym
0
260
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
440
CursorとClaudeCodeとCodexとOpenCodeを実際に比較してみた
terisuke
1
500
「Linuxサーバー構築標準教科書」を読んでみた #ツナギメオフライン.7
akase244
0
1.4k
SREに優しいTerraform構成 modulesとstateの組み方
hiyanger
2
150
CDK Deployのための ”反響定位”
watany
5
890
Featured
See All Featured
Designing for Timeless Needs
cassininazir
0
210
Skip the Path - Find Your Career Trail
mkilby
1
110
WCS-LA-2024
lcolladotor
0
550
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
The Curious Case for Waylosing
cassininazir
0
320
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
220
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
330
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
180
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
How to train your dragon (web standard)
notwaldorf
97
6.6k
The SEO Collaboration Effect
kristinabergwall1
1
430
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側に処理を作られる
結局、最終的には人をどうやって教育するかになりますね…
ご清聴ありがとうございました。