Padrão Singleton
·Nem todos os objetos em Unity são criados da mesma forma, alguns tem maior importância. Você pode, por exemplo, ter um objeto GameManager, que possui funções como a de gameover, lida com o placar e mudanças de cena. Esse objeto será referenciado por várias classes pelo jogo, porém ele não pode ser estático, então referências à ele teriam que ser feitas da forma GameObject.Find(“Manager”) ou algo do tipo. Isso não é ideal, já que a função Find() não é eficiente, isso é o caso para a maioria das funções que atravéssam a hierarquia para encontrar um objeto, em graus diferentes.
O GameManager possui uma característica que pode nos ajudar a referênciá-lo de forma eficiente, isto é o fato que só pode existir um destes objetos ativos em um dado momento. Isso nos possibilita o uso do padrão Singleton de design.
public class GameManager : MonoBehaviour
{
//
// ...
//
public int a = 3;
public static GameManager Instance;
void Awake() // Awake ocorre ainda antes do Start()
{
Instance = this;
}
//
// ...
//
}
Referências ao GameManager podem então ser feitas assim:
public class MinhaClasse : MonoBehaviour
{
void Start()
{
Debug.Log(GameManager.Instance.a);
// => 3
}
}