A Singleton exposes one shared instance.
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
void Awake()
{
if (Instance != null &&
Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
}
}
Usage:
GameManager.Instance.GameOver();
Useful for truly global services, but excessive Singletons create hidden coupling.