Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Acessando o GameObject de imagem de Game Over

Não seria possível acessar o Objeto de imagem de Game Over, dentro do script Diretor, utilizando o GameObject.FindObjectOfType, como foi feito na classe Avião para acessar o Diretor? Pergunto porque, nesse caso, essas referências ficariam todas por script ao invés de ora no script, ora no Object Inspector. Tentei fazer funcionar, mas parece que há uma incompatibilidade de tipos que não entendi bem.

7 respostas

Bom dia Maurício, é possível deixar essa referência via código sim. Acontece que nesse caso deixaríamos o sistema mais rígido, caso o artista da equipe queira fazer uma interface de teste e ver como ela ficaria dentro do sistema.

Vc tem o código que você usou pra tentar fazer essa referência via código?

Oi, Ricardo. Entendi o motivo, mas queria mesmo saber se era possível porque tive a impressão que não conseguiria fazer esse acesso via código com objetos de classes de UI. Vou postar o extrato do código que escrevi:

private GameObject gameOverBackground;
...
    private void Start()
    {
        this.gameOverBackground = GameObject.FindObjectOfType<GameOverBackground>();
    }

Obrigado pela força até agora. Abraço.

Como você usou o comando GameObject.FindObjectOfType<GameOverBackground>() Para que a Unity ache a referencia do objeto que você quer, você precisa ter um componente com esse mesmo nome no seu GameObject.

Para evitar criar um componente "vazio" você pode procurar diretamente pelo nome do objeto, com o comando `GameObject.Find("GameOverBackGround") - https://docs.unity3d.com/ScriptReference/GameObject.Find.html.

Ou pode procurar objetos de acordo com uma tag `GameObject.FindWithTag("tag") - https://docs.unity3d.com/ScriptReference/GameObject.FindWithTag.html.

Oi, obrigado pela dica. Mas eu ainda tenho dúvidas... rsrsrs. Desculpe.

O GameOverBackground é o meu objeto UI do tipo Panel que esta na Scene... o painel de fundo da tela de Game Over que é exibido no Canvas. Seria esse objeto que eu quero achar pra ativar ou não da classe Diretor. Tive a impressão de que o problema ocorrer porque é um objeto UI.

Vou tentar acesso utilizando um dos outros métodos que você citou. Obrigadão.

solução!

Então Maurício, Todos os objetos que estão na cena de jogo são do tipo GameObject. Independente se eles tem um comportamento de interface ou de Jogo.

O que define os comportamentos de um objeto são os componentes que colocamos neles. Isso porque todo objeto que adicionamos na cena deve ser do tipo gameObject ( https://docs.unity3d.com/2017.4/Documentation/Manual/class-GameObject.html)

Quando fazemos uma busca por tipo FindObjectOfType<>() estamos fazendo a unity percorrer todos os game Objects da cena e verificar qual ou quais deles tem o componente do tipo que queremos.

Como você falou seu "GameOverBackground" possui um componente do tipo Panel e se você quiser buscar ele deve procurar por objetos que tenham esse componente FindObjectOfType<Panel>(). Acontece que outros objetos podem ter esse mesmo componente e por isso é difícil fazer essa busca de maneira efetiva e achar o objeto que você deseja.

Por isso que preferi fazer a atribuição pela interface da Unity. Além de deixarmos mais fácil para fazer alterações se precisarmos. Lembra tbm que sempre trabalhamos com outras pessoas no projeto e nem todos sabem ou querem colocar a mão no código.

Oi, Ricardo.

Entendi. Acho que esse foi meu erro... busquei pelo nome do objeto e não pelo tipo. Nesse caso, eu teria que usar o Find mesmo. Valeu o aprendizado e muito obrigado pela informação.

Boa tarde Ricardo,

Mas como gerar o executável para não depender a Unity para rodar?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software