Cenas Aditivas

A UI é uma parte muito importante de qualquer jogo, mais importante ainda é que ela seja consistente entre fases diferentes. A forma que vimos para criar UIs até agora não é ideal, pois ao fazer alterações, precisamos replicá-las em todas as cenas que a usam.

Uma forma mais versátil de fazer nossa UI é colocá-la numa cena própria, e então carregar tal cena de forma aditiva(ou, por cima) da cena da fase.

void Start()
{
	StartCoroutine(LoadUI());
}
IEnumerator LoadUI()
{
	var _UIScene = SceneManager.LoadScene("UI", new LoadSceneParameters(LoadSceneMode.Additive));   // Carrega a UI por cima da cena inicial

        while(!_UIScene.isLoaded)   // Espera até a UI estar carregada
        {
            yield return null;
        }
}

Note que carregar cenas aditivamente pode demorar um pouco, por isso é recomendado usar uma Corotina

A desvantagem desse método é que referências entre objetos da UI e da fase devem ser tratadas com mais atenção. Utilizar o Padrão Singleton, e tags pode ajudar bastante. Outra forma é utilizar a referência a cena retornada pela função LoadScene().

_UIScene.GetRootGameObjects()[0].transform.Find("Health Bar").SetFullHP();