Para expandir a resposta do Tetrad, considere um 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.
}
Você pode criar um objeto chamado "GameSystem" na raiz da sua cena. Os únicos componentes que ele teria seriam o componente de transformação interno (defina sua posição para a origem, sua rotação para identidade e sua escala para um; não que isso importe, mas seja uma boa prática). Anexado o componente GameSystem a esse objeto.
Agora você pode acessar seu objeto global usando simplesmente GameSystem.Instance.blah (). Seus métodos de manipulador de eventos são invocados automaticamente pelo Unity, pois deriva do MonoBehavior e existe como um componente. Você pode adicionar campos a ele que façam referência a outros objetos ou componentes do jogo e conectá-los na exibição da hierarquia de objetos do Unity.
Sim, tudo isso é um pouco "estranho". Pode parecer um pouco sujo ter que criar um objeto (que até tenha uma transformação) que é sempre apenas um singleton global. É o que o Unity exige para criar objetos globais que recebem uma mensagem de Atualização e são manipuláveis com o editor de propriedades padrão do Unity.