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.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
340
20240301_cocone_EMゆるミートアップvol6_LT資料
cocone
0
950
2024_cocone-wellbeing
cocone
0
5.2k
2023夏季合同企業説明会ココネ
cocone
0
410
cocone TECH TALK Vol.6 - リアルタイム対戦xバックエンドアーキテクチャ
cocone
0
720
cocone TECH TALK Vol.6 - ココネグループのブロックチェーン MOOI Network とのバックエンド連携
cocone
0
660
cocone TECH TALK Vol.6 - Kotlin バックエンドアーキテクチャ of アバターサービス
cocone
0
640
cocone corporation(JPN)/Handbook2022
cocone
1
31k
cocone Tech Talk vol.5 - Unity Dotsを使ってみた
cocone
0
2.6k
Other Decks in Programming
See All in Programming
プロポーザルを書いてもらう
pvcresin
0
560
仕様駆動開発の消費期限
watany
20
8.7k
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
430
Android CLI
fornewid
0
230
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
440
メールのエイリアス機能を履き違えない
isshinfunada
0
250
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
270
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
110
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
210
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
530
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
1.1k
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
530
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
780
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
800
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.2k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
400
Leo the Paperboy
mayatellez
8
2.2k
Abbi's Birthday
coloredviolet
3
9.4k
Scaling GitHub
holman
464
140k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
420
The Invisible Side of Design
smashingmag
301
52k
New Earth Scene 8
popppiees
3
2.5k
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側に処理を作られる
結局、最終的には人をどうやって教育するかになりますね…
ご清聴ありがとうございました。