定期的に良く忘れる、簡易シングルトン化の方法。
DontDestroyOnLoadで、シーン跨ぎに対応。
長文のちゃんとした奴はヨソで探してください。
【やる事1】GameManagerのスクリプトにコードを追加
public class GameManager : MonoBehaviour
{
public static GameManager Instance = null;
void Awake ()
{
if (Instance == null)
Instance = this;
else if (Instance != this)
Destroy(gameObject);
DontDestroyOnLoad(gameObject);
}
}
【やる事2】スクリプトの実行順序を変更(GameManagerの初期化を先に実行させる)
- Unity上部メニュー -> Edit -> Project Settings
- Project Settingsウィンドウ -> Script Execution Order
- Default Timeと書いてある所の、右下の「+」をクリック。
- 全スクリプトの一覧が出るので、GameManagerを指定。
- 登録されたGameManagerを、Default Timeより上に、ドラッグ&ドロップ。
- 「3」でクリックした「+」の下にあるApplyをクリック。
変更を確定しておく。
- スクリプト名の右にある値が小さい程、実行順が早い。
- ○○Manager系は、Default Timeより上に設定しておけば、まず間違いない。
シングルトンは公式でも推奨されていると思われる
以下で使用されているのを確認。
- Unity公式アセット(Unity Technologies)の一部
- Unityアセットストアで販売されている有名アセット
- Corgi Engine
- TopDown Engine
更に、Unityでは「GameManager」という名前でスクリプトを作成すると、表示アイコンが別の物に変わる仕様もある。