Buscar

SpawnManager(Instancia inimigos aleatórios em hordas - basico-intermediario)

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnManager : MonoBehaviour{
 #region--------------------------------------------------------------------v VARIÁVEIS v--------------------------------------------------------------------
 public GameObject enemyPrefab; // 5. Referenciar prefab Enemy
 private float spawnRange = 9.0f; // 5.1
 public int enemyCount; // 9.2
 public int waveNumber = 1; // 9.3 Controle de quantos Enemys irão surgir após o total chegar a 0 por na cena
 public GameObject powerupPrefab; // 9.4 Referência do powerup
 #endregion------------------------------------------------------------------^ VARIÁVEIS ^--------------------------------------------------------------------
 void Start()
 {
 SpawnEnemyWave(waveNumber); // 9 --v [9.1 passo o número de inimigos que quero instanciar, de acordo com meu método criado][9.3 Irá Instanciar de acordo com o acréscimo na variável waveNumber]
 Instantiate(powerupPrefab, GenerateSpawnPosition(), powerupPrefab.transform.rotation);
 }//=========================================================================^ START ^======================================================================
 
 void Update()
 {
 enemyCount = FindObjectsOfType<Enemy>().Length; // 9.2 Irei achar o script do meu Enemy na cena. Como ele possui mais de 1 prefab, tenho que usar o método Length, pois é uma matriz.
 if(enemyCount == 0) // 9.2 Quando os inimigos chegarem a 0 na cena, meu método de instanciar os Enemys vai gerar 1
 {
 waveNumber++; // 9.3 Vai adicionar 1 Enemy sempre que a contagem chegar a 0. Ou seja, o game começa com 1, se chegar a 0, será instanciado waveNumber + 1, se chegar a 0, será instanciado waveNumber (que está em 2 no momento) + 1... E assim sucessivamente.
 SpawnEnemyWave(waveNumber); // 9.3 Instancia os Enemys atualizando com o valor do enemyNumber++ sempre que chegar a 0
 Instantiate(powerupPrefab, GenerateSpawnPosition(), powerupPrefab.transform.rotation); // 9.4 Instanciando um powerup aleatório a cada onda. Como já tenho um método que me dá uma posição de Vector3 GenerateSpawnPosition(), uso ele
 }
 }//=========================================================================^ UPDATE ^======================================================================
 private Vector3 GenerateSpawnPosition() // 5.2
 {
 float spawnPosX = Random.Range(-spawnRange, spawnRange);// 5.1 Intervalo aleatório de spawn no eixo X
 float spawnPosZ = Random.Range(-spawnRange, spawnRange); // 5.1 Intervalo aleatório de spawn no eixo Z
 Vector3 randomPos = new Vector3(spawnPosX, 0, spawnPosZ); // 5.1 Variável para a posição de spawn do meu Enemy
 return randomPos; // 5.2 retornando o valor do Vector3 para poder ser usado
 /* OBSERVAÇÃO: Uso um método return pois este método me retorna um valor Vector3 sempre, como preciso usar esse
 valor para instanciar o objeto, uso o return, assim posso utilizá-lo em qualquer lugar do script */
 }//---------------------------------------------------------------------^ GenerateSpawnPosition() ^---------------------------------------------------------------------
 private void SpawnEnemyWave(int enemiesToSpawn) // 9. Gerando mais inimigos
 {
 for (int i = 0; i < enemiesToSpawn; i++) // 9. Defino o tipo da minha variável i; faço a condição dela, no caso i < enemiesToSpawn (no caso, definirá a quantidade que quero spawnar de inimigos); E acresço 1 ao meu i (poderia ser i += 1). Ou seja, cada vez que acrescer 1, ele lerá o código e instanciará um inimigo, totalizando 3, pois começa do 0
 {
 Instantiate(enemyPrefab, GenerateSpawnPosition(), enemyPrefab.transform.rotation); // 5. Gerando (instanciando) meu Enemy numa posição aleatória (reopare que todo o cálculo da posição está no meu método return lá embaixo)
 }
 }//---------------------------------------------------------------------^ SpawnEnemyWave() ^---------------------------------------------------------------------
}//===================================================================^ MonoBehaviour{...} ^==================================================================

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando