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
310
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
690
cocone TECH TALK Vol.6 - ココネグループのブロックチェーン MOOI Network とのバックエンド連携
cocone
0
610
cocone TECH TALK Vol.6 - Kotlin バックエンドアーキテクチャ of アバターサービス
cocone
0
630
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
Migrations : C'est une question d'hygiène !
vinceamstoutz
0
1k
開発とはなにか、Essenceカーネルで見えるもの
ukin0k0
0
200
2026年のソフトウェア開発を考える(2026/05版) / Software Engineering Scrum Fest Niigata 2026 Edition
twada
PRO
24
14k
新規プロダクトを高速で生み出すハーネスエンジニアリング
seanchas116
3
250
Are We Really Coding 10× Faster with AI?
kohzas
0
220
要はバランスからの卒業 #yumemi_grow
kajitack
0
190
Oxlintはいかにしてtsgolintのlint ruleを呼び出しているのか
syumai
1
440
AI駆動開発で崩れていくコードベースを立て直す
kyoko_nr_nr
1
320
バックエンドにElysiaJSを採用して気付いた、良い点・悪い点
wanko_it
1
140
Kubernetesを使わない環境にもCloud Nativeなデプロイを実現する / Enabling Cloud Native deployments without the complexity of Kubernetes
linyows
3
490
1人1案件のプロダクトエンジニア時代に、"プロセス監督"としてチャレンジしたこと
non0113
0
170
AI Agent と正しく分析するための環境作り
yoshyum
2
570
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
180
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
530
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
830
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
460
Building Applications with DynamoDB
mza
96
7k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
170
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
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側に処理を作られる
結局、最終的には人をどうやって教育するかになりますね…
ご清聴ありがとうございました。