Para ampliar la respuesta de Tetrad, considere un script como este:
public class GameSystem : MonoBehavior
{
private GameSystem m_Instance;
public GameSystem Instance { get { return m_Instance; } }
void Awake()
{
m_Instance = this;
}
void OnDestroy()
{
m_Instance = null;
}
void Update()
{
// global game update logic goes here
}
void OnGui()
{
// common GUI code goes here
}
// etc.
}
Luego puede crear un objeto llamado "GameSystem" en la raíz de su escena. Los únicos componentes que tendría serían el componente de transformación incorporado (establezca su posición en el origen, su rotación en identidad y su escala en uno; no es que importe, pero es una buena práctica). Adjuntó el componente GameSystem a ese objeto.
Ahora puede acceder a su objeto global simplemente usando GameSystem.Instance.blah (). Unity invoca automáticamente sus métodos de controlador de eventos, ya que deriva de MonoBehavior y existe como componente. Puede agregarle campos que hagan referencia a otros objetos o componentes del juego y conectarlos en la vista de jerarquía de objetos de Unity.
Sí, todo esto es un poco "extraño". Puede sentirse un poco sucio tener que crear un objeto (que incluso tiene una transformación) que siempre es solo un singleton global. Sin embargo, es lo que Unity requiere para crear objetos globales que reciben un mensaje de actualización y son manipulables con el editor de propiedades predeterminado de Unity.