Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos II / Aula

arrow_back Aula 06 - Jogo Polygonal Rescue - Parte 4 - Prefabs e Mudanças de Fases

Testando a Criação de Instâncias de Prefabs por Scripts em uma Nova Cena

Edite o script InstanciarPrefabs, apague os métodos Start e Update para iniciar com um script vazio e adicione as variáveis públicas:

  • Uma lista de GameObject chamada “prefabs_base” que guardará os prefabs usados como base para a criação das instâncias aleatórias. Essa lista será posteriormente preenchida com os prefabs ColetavelCube e ColetavelCylinder.
  • Uma variável float chamada “distancia_maxima” representando a distância máxima do centro em que a posição aleatória das instâncias dos prefabs serão criadas.
  • Uma variável int chamada “quantidade” que indicará quantas instâncias aleatórias queremos criar.

Veja na Figura 16 as variáveis adicionadas no nosso script até agora.

Repare que nesse script a variável prefabs_base é do tipo List, ou seja, ela armazena vários objetos do tipo GameObject. Usaremos essa variável para armazenar nossos prefabs ColetavelCube e ColetavelCylinder, os quais serão usados para a criação das instâncias, porém esse sistema pode servir para qualquer Prefab em outro jogo. Se você observou bem, o tipo que a lista prefabs_base armazena é GameObject e não ColetavelCube ou ColetavelCylinder. Isso está correto, pois no Unity praticamente todos os objetos que são utilizados na criação de elementos visuais nos jogos usam classes no C# as quais herdam de GameObject, portanto podemos adicioná-los em uma List sem problemas. Não confunda essa lista prefabs_base com as instâncias que serão criadas. A lista prefabs_base só armazenará dois objetos (ColetavelCube e ColetavelCylinder). As instâncias criadas não serão armazenadas em variáveis, elas somente existirão no hierarchy depois de criadas pelo script.

Salve seu script e, voltando ao Unity, certifique-se de que o GameObject InstanciarPrefabs está selecionado, vá até seu inspector e veja que o script adicionado nele agora tem três propriedades, cada uma referente a uma das variáveis criadas, veja na Figura 17.

Vamos alterar o valor dessas propriedades agora. Inicialmente vamos expandir a propriedade “Prefabs_base”, mostrando um item chamado “Size” o qual está com o valor zero. Modifique esse valor para 2, pois temos dois prefabs para usarmos como base (ColetavelCube e ColetavelCylinder). Verifique que, depois disso, dois novos campos foram mostrados, um para cada Prefab. Arraste o Prefab ColetavelCube da sua pasta para o primeiro campo e o Prefab ColetavelCylinder para o segundo campo. Após isso digite na propriedade Discancia_maxima o valor 10 e em Quantidade o valor 5. Isso indica que queremos criar cinco instâncias no total, sendo elas escolhidas aleatoriamente entre os prefabs ColetavelCube e ColetavelCylinder, todas em posições aleatórias, porém no máximo a uma distância de 10 unidades do centro do GameObject InstanciarPrefabs. A Figura 18 mostra como as propriedades do script ficarão depois dessas mudanças.

Edite novamente o script InstanciarPrefabs.cs e agora crie o método Awake() que será utilizado para instanciar os prefabs. O método Awake() é executado imediatamente antes do método Start(). Escolhemos esse método para criar as nossas instâncias, mas também poderia ser o Start() a funcionar normalmente. Nesse caso é apenas uma questão de preferência e organização, escrevemos o código que cria objetos iniciais no Awake e deixamos o Start para o código o qual considera que esses objetos já estão criados. Mas, repetindo, trata-se somente de organização de código, e isso, apesar de importante, é pessoal.

Versão 5.3 - Todos os Direitos reservados