LoginSignup
1
2

More than 3 years have passed since last update.

[Unity] マルチシーンについて再確認する [1week反省会]

Last updated at Posted at 2021-01-13

これを作った時の話


特に理由もなかったがシーン読み込みするならマルチシーンでしょ!みたいなノリで
ちょっとやってみたら無駄に時間をロスしたという反省会

まずこれを読め

過去の自分にまず言いたい。

そもそも全くコード書きたくない人

車輪はもう作らない! 絶対にだ! という人は、
マルチシーンでググれば色々出てくるのでコピペすればいいと思うよ!
フルスペックを目指したシーンマネージャーみたいなものが沢山出てくるので。

マルチシーンを設計するうえで

よくある要件を考えてみる。これらは網羅したうえで設計するのがいいだろう。

  • シーン間でデータを渡したい。(シーン遷移あるある)
  • シーンが閉じるまで待ちたい。(ダイアログ系追加シーンの必須要件)
  • シーン遷移用アニメーションを入れたい (シングルシーンだと実質出来ないようなもの)

これプラス、公式ドキュメントに書かれている以下を忘れずに踏襲する。

シーンの読み込みで、マネージャーオブジェクトの役割を持つゲームオブジェクトを残したいときに
DontDestroyOnLoad を使用するのは避けてください。

代わりに、マネージャーオブジェクトを持つシーンを作成し、
ゲームの進行を管理するSceneManager.LoadScene(<path>,LoadSceneMode.Additive) と SceneManager.UnloadScene を使用します。

これな。
ネットにシーン遷移の仕組み公開している人でも、DontDestroyOnLoad している人はちょいちょい見る。
これをやると、同じシーンを開きなおしたいときに詰む
1weekの時にこれをやって結構な時間をロスしてしまった。

こういう公式の言っている事を無視して実装すると痛い目を見るものなのです(俺のこと)
ツールは正しく使うことが大切!

シーンが閉じるまで待ちたいとかよくあるやつ

モーダルのダイアログ(〇〇しますか? はい/いいえ みたいなの)をシーンで作った場合や、サブシーンに必要とされることが多い。
これが仕組みとして存在していると、緊急で新しい実装を要求されてもどうにかできることが多い。
つぶしが効きやすい。(急にログインボーナス入れるとか湧いてきても大丈夫)

メインシーン
↓
ダイアログ
↓
メインシーンの続き

みたいな動き。

メインシーンは停止しておいて、全く別の演出がしたい場合に有効な手法だ。

ダイアログの用途だと画面の決まった位置に上書きで出したい、みたいな挙動なので、
シーン上にカメラやキャンバスを設定しておけば、どこから呼び出しても一律の表示設定にすることができる。

var dialog = new UserDialog<T>(dialogParam);

await dialog.OpenAsync();

Debug.Log(dialog.Result); // なんか処理

みたいな形でちゃんと await できるように実装しておく!

反省まとめ

GameJamなど時間が厳しい場合は、はっきりいってシングルシーンでいいわけだが(自戒)

タイトルインゲーム * (繰り返しn回) ⇒ リザルト ⇒ タイトル(ループ)

みたいな構造だと、殆どデメリットはない。(演出懲りたい場合は別)
シングルトンに必要なデータ保持しておいてシングルシーン読み込みでいいだろう。

実際、gamejam では、時間が無くてレベルデザイン部分は殆ど着手できなかった。

特にメモリリークをほぼ気にしなくていいのはでかい。
タイトルに戻るときなど、インゲームに関係しない場所に移動するときはシングルシーンで読み込むのは全然アリ。

(業務でもシングルシーン読み込みで一気にすっきりしてるアプリがあって驚いたことがあったが、
割とガチで綺麗になるので、脳死で安定しやすい。)

そして、

マルチシーンにしたければ、まずマネージャーシーンを作れ

忘れずに心に刻み込もう(-人-)

こういった汎用的な機能はテンプレにしておいた方がいい。
自分で作るか、誰かのテンプレを借りるか、あらかじめ決めておこう。
準備大切。

以上

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2