Frameworks

Simple Framework 1811

SimpleFramework1811

Unity用の簡易フレームワーク2018年11月版。

以下の機能を集約したGameManagerオブジェクトプレハブと、デモシーンです。

  • スコアとステージ数を、シーンを跨いで記録
  • スコアとステージ数の表示
  • フェードを伴うシーンの切り替え
  • BGM再生
  • SE再生(2Dやシステム音用)

バージョン情報

  • Unity2017.x以降用

動作デモ

本リポジトリーをクローンするか、ダウンロードして展開したフォルダーをUnityで開くと、GameManagerプレハブを利用したデモプロジェクトを確認できます。

ProjectウィンドウからAM1GameManager/Demo/Scenesフォルダーを開いて、DemoTitleをダブルクリックして開いたら、Playしてください。

タイトル

クリックしたらゲーム開始します。

Stage1

マウス操作で、跳ねているボールを取っていくゲームです。

Stage2

ステージは2つあります。2ステージクリアすると、タイトルに戻ります。

確認できる機能

  • ゲーム開始時の初期化処理
  • シーン切り替え時のフェードイン/アウト
  • BGM、SEの再生
  • シーンを跨いだBGM再生
  • スコア、ステージ数の描画
  • シーンを跨いだスコア、ステージ数の保持

アセットを組み込み

GameManagerプレハブをプロジェクトに組み込む方法です。

  • 新規でプロジェクトを作成するか、既存のプロジェクトをUnity2017.4以降で開きます
  • こちらから、最新版のSimpleFramework1811.unitypackageをダウンロードします
  • ダウンロードしたファイルをダブルクリックするか、UnityのProjectウィンドウにドラッグ&ドロップしてインポートします
  • ProjectウィンドウにAM1GameManagerフォルダーが追加されます。この中に必要なアセットがまとまっています
  • 最初に起動したいシーンすべてに、AM1GameManager/Prefabsフォルダー内のGameManagerプレハブを配置してください

以上で組み込み完了です。

基本情報

GameManagerオブジェクトは、Don’t Destory On Loadが設定されるので、シーンが変わっても存在し続けます。

GameManagerスクリプトはシングルトンです。こちらもデータが破棄されることはありません。このスクリプトに定義したプロパティ(変数)は、シーンが切り替わっても記録され続けます。ゲーム中にずっと記録しておきたいパラメーターは、このクラスに追加して管理するとよいでしょう。

既存のプロジェクトへ組み込む際の注意

  • 既存のプロジェクトにGameManagerSingletonスクリプトがあると、名前が衝突します。一方のスクリプト名を変更するか、ネームスペース内に入れるなどしてください。

GameManagerプレハブの利用

GameManagerプレハブの利用方法です。

BGMやSEの利用

BGMやSEは、GameManagerオブジェクトのSoundManagerコンポーネントに音源と名前を登録して、あとはメソッドで再生を制御します。

音源の設定

  • 利用するMP3やOGG、Wave形式の音源を、プロジェクトに加えておきます
  • Hierarchyウィンドウで、GameManagerオブジェクトをクリックして選択します
  • InspectorウィンドウのSoundManagerコンポーネントのBGM欄の左の三角アイコンをクリックして開きます

ゲームの初期化処理

シーンの切り替え

スコアやステージ数の表示/非表示切り替え

シーンを切り替えると画面が暗くなる

これもUnityあるあるですが、ライトのベイク(焼き込み)をしていないと、シーンを切り替えた時に環境光が無効になって、画面が暗くなってしまうことがあります。ライティングが決まったら、Lightingの設定でAuto Generateフラグを外して、

ビルドすると直ります。


このフレームワークの前提

Unityのシーン管理のコツです。

ゲーム全体を管理するためのマネージャーと、各シーンを管理するためのマネージャーを分けて作りましょう!

マネージャーの考え方

ゲーム全体で必要な機能は、ピンクで表したGameManagerに実装します。これが本リポジトリーで提供するプレハブです。

このGameManagerに、シーン別の機能は一切加えないことが大切です。それをやると、シーンを切り分けるためのif文が必要になったり、シーン内のオブジェクトの参照が消えたりして大変なことになります。このようなやってはいけないことをアンチパターンと言います。

ゲーム全体を管理するGameManagerは、マルチシーンにしたり、今回のようにDontDestroyOnLoadを設定して、永続させるようにします。そして、データの取り出しや設定用のメソッドやプロパティを提供して、各シーンから必要に応じてアクセスしてもらうようにします。

各シーンを管理するためのオブジェクトは、通常のオブジェクトやスクリプトにして、シーンが読み込まれるたびに新規に作成され、完了したら破棄されるようにしておきます。このようなシーン専用の管理オブジェクト&スクリプトを、ゲーム全体の管理オブジェクトと別に持たせることで、シーンの切り替え時に変わってはいけないものはGameManagerに実装し、シーンの切り替え時に初期化が必要であったり、シーン内のインスタンスを利用するものはシーン毎の管理オブジェクトに実装すれば、スッキリとした設計にできます。


利用アセット

BGM/SE

本アセットに含まれるサンプルのBGMとSEは魔王魂さんのものです。

魔王魂

https://maoudamashii.jokersounds.com/

Singleton.cs

シングルトンのスクリプトは、GitHubのUnityCommunityで公開されているUnitySingletonを組み込みました。