シングルトンの拘束を受けていない使用が悪い考えであるという説得力のある議論があるのは間違いありませんが、 gameprogrammingpatterns.comのSingletonのように 、シームレスなバックグラウンドミュージックのように複数のシーンでGameObjectをUnityに永続させたい場合があります。インスタンスを複数存在させることはできません。シングルトンの完璧な使用例
このスクリプトをGameObjectに追加することにより、インスタンス化されると(Sceneの任意の場所に挿入するなどして)、シーン全体でアクティブなままになり、インスタンスは1つしか存在しません。
ScriptableObject ( UnityDoc )インスタンスは、ユースケースによってはシングルトンに対する有効な代替手段を提供します。それらは暗黙のうちに単一のインスタンスルールを強制しませんが、シーン間で状態を保持し、Unityのシリアル化プロセスをうまく使います。依存関係がエディタを介して注入されると、 Inversion of Controlも促進されます。
// MyAudioManager.cs
using UnityEngine;
[CreateAssetMenu] // Remember to create the instance in editor
public class MyAudioManager : ScriptableObject {
public void PlaySound() {}
}
// MyGameObject.cs
using UnityEngine;
public class MyGameObject : MonoBehaviour
{
[SerializeField]
MyAudioManager audioManager; //Insert through Inspector
void OnEnable()
{
audioManager.PlaySound();
}
}