質問: Unityを最近触り始めた、プログラミング初心者です。 Unityで縦スクロールのシューティングゲームを作りたいと思っています。 iOS、Androidで動作するものをリリースまでしたいと思っています。 作りたいもののイメージは、雑魚的をガンガン倒していき、最後にボスが登場し、倒せばステージクリアでステージ選択画面へ戻り、次のステージに挑戦することが出来るといったオーソドックスな縦シューになります。 入門書を一冊読んだ後、以下のサイトのDanmaku I~IIIをやり終えました。 https://codegenius.org/open/courses 上記の学習サイトではStage1のシーンにあるCanvasを丸ごとPrefab化し、Stage2のシーンに丸々貼り付けて、その調子でStage3、4、5と同じように新たにシーンを作り、同じようにやってみよう!といった雰囲気だったのですが、世に出回っているUnity製スマホシューティングも大体同じようなやり方なのでしょうか? もし上のサイトを参考にオリジナルのものを作るとすれば、普通のボリュームでも、数十シーンは作成しますし、本格的なものを作るとなれば何百シーンと作成することになります。 完全な推測でしかないのですが、登場する敵機、ボスの体力、発射される弾など情報を、外部のテキストファイルやcsvファイルなどからいろいろ引っ張って管理してるのかなぁーなどと思っております。 個人的にはシーンを10個や20個と独立したステージシーンをたくさん作り、ステージ選択画面に大量に配置したボタンをタップすることでそれぞれのステージへと遷移するやり方しか術を知らないので、出来ればこれで出来たらと思っていますが、遷移後に暗くならないようにAUTO GENERATEのチェック外す設定を全てのシーンに行って、なんかその設定フォルダとかもたくさん出来ますよね。 シーン遷移はStage1、Stage2、Stage3、Stage4、Stage5のように決まった名前にすれば、 ``` public void OnStageButtonClicked (int stageNo) { SceneManager.LoadScene ("Stage" + stageNo); } ``` とすることで簡単にそれぞれ違うシーンへと遷移することが出来るのですが、 心なしか、この手段がパフォーマンスや容量に支障をきたしそうな雰囲気です。。。(初心者で知らないことが多いため、最適化に関してはもっと他に気をつけることがあるとは思いますが。) 他に似たような質問がされてないか調べた結果が以下のページです。 ゲームジャンルや用途は不明ですが、シーンを100個も用意している。 回答者様が、stageNoという引数でシーン遷移先を分ける処理を採用している。 なので、もしかしたら自分のやり方でも特に問題ないのかな?とは思ってはいます。 別にシーンをいくら作っても、アプリの容量が増えたり、動作やロード時間などが重くなったりしないのであれば、一つ一つ確実にたくさんのステージシーンを用意するのもアリだとは思ったのですが、実際のところどうなのでしょうか? その箇所の修正や更新を行う場合に大変な作業量になるだけなら、開発者側の問題なのでまだいいのですが、それが原因で1アプリ何ギガと容量が増えたり、シーン遷移が発生する度に膨大なロード時間が発生したりすれば、ユーザが快適に遊べなくなってしまいます。 特にどっちでも外面があまり変わらないのであれば、学習の難易度や管理のしやすさなどを考慮して好きな方を選択できますが・・・。 今回自分が疑問に思った部分以外でも何かアドバイスなど貰えると嬉しいです。 ある程度やり方をしっかり決めた上で開発に取り組みたいと思っているので、質問が多くて申し訳ありませんが、よろしくお願いします。
回答: 同じプレハブの流用であれば、シーン1とシーン2と・・・シーンnで繰り返し使っても、それによってデータサイズがn倍になってしまうようなことはありません。 たしかにデータの持ち方にはさまざまな方法があると思いますが、Canvasのデータが原因でゲームが重くなったり遅くなったりすることは多くないと思います。 初心者ということであれば、まずは基本的な(プレハブを使う)方法でゲームを作ってみて、もしもCanvasデータが処理のボトルネックになっているようであれば、そのときにあらためて見直す、というくらいの考え方でいいのではないでしょうか。