Это использование паттерна Singleton. Его полно в инете. Например, здесь хитрый, здесь попроще и с объяснениями. Приложу ещё код из книги Pro Unity Game Development with C#:
Код
//GameManager
//Singleton and persistent object to manage game state
//For high level control over game
//--------------------------------------------------------------
using UnityEngine;
using System.Collections;
public class GameManager : MonoBehaviour
{
//C# property to retrieve currently active instance of object, if any
public static GameManager Instance
{
get
{
if (instance == null) instance = new GameObject ("GameManager").AddComponent<GameManager>(); //create game manager object if required
return instance;
}
}
//Internal reference to single active instance of object - for singleton behaviour
private static GameManager instance = null;
// Called before Start on object creation
void Awake()
{
//Check if there is an existing instance of this object
if((instance) && (instance.GetInstanceID() != GetInstanceID()))
DestroyImmediate(gameObject); //Delete duplicate
else
{
instance = this; //Make this object the only instance
DontDestroyOnLoad (gameObject); //Set as do not destroy
}
}
public void RestartGame()
{
//Load first level
Application.LoadLevel(0);
}
public void ExitGame()
{
Application.Quit();
}
}
Добавляешь скрипт на пустой gameObject, чтобы использовать в другом скрипте GameManager.Instance._член_класса_ (например GameManager.Instance.RestartGame()). Свои переменные/методы добавляй без static.