Spawn de objetos
4 participantes
Página 1 de 1
Spawn de objetos
Olá galera,
Estou com um script aqui que spawna nos locais que eu quero e tal com um tempo. Esse script é bastante funcional, mas queria adicionar uma função nele que é de ter um limite de objetos spawnados (Ex: Tenho 10 locais de spawn, mas não quero que spawne os 10, quero que spawne uns 5 no máximo, ai conforme o player vai destruído, vai nascendo mais) e tbm uma função que NÃO spawne um em cima do outro. Mas não faço ideia como faço isso. Quem puder ajudar ficarei muito grato, falta pouco pra acabar meu jogo.
Segue o script:
Estou com um script aqui que spawna nos locais que eu quero e tal com um tempo. Esse script é bastante funcional, mas queria adicionar uma função nele que é de ter um limite de objetos spawnados (Ex: Tenho 10 locais de spawn, mas não quero que spawne os 10, quero que spawne uns 5 no máximo, ai conforme o player vai destruído, vai nascendo mais) e tbm uma função que NÃO spawne um em cima do outro. Mas não faço ideia como faço isso. Quem puder ajudar ficarei muito grato, falta pouco pra acabar meu jogo.
Segue o script:
- Código:
using UnityEngine;
using System.Collections;
public class Spawner : MonoBehaviour {
public Transform[] locais;
public GameObject[] enemy;
private float cronometro;
public float tempoPorSpawn;
// Update is called once per frame
void Update () {
cronometro += Time.deltaTime;
if (cronometro >= tempoPorSpawn) {
Instantiate(enemy[Random.Range (0,enemy.Length)],locais [Random.Range(0, locais.Length)].transform.position, transform.rotation);
cronometro = 0;
}
}
}
Hardencio- Avançado
- PONTOS : 3719
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: Spawn de objetos
Tente isso:
O que eu adicionei foi limitar o numero de inimigos, e quando spawnar adicionar uma posição aleatoria em circulo a mais para spawnar, sendo assim os inimigos nao irao spawnar exatamete no mesmo lugar mais bem proximo dentro de um raio determinado pela variavel spawnRadius. Não testei e fiz no notepad entao pode ter erros kk.
- Código:
using UnityEngine;
using System.Collections;
public class Spawner : MonoBehaviour {
public Transform[] locais;
public GameObject[] enemy;
private float cronometro;
public float tempoPorSpawn;
public int maxEnemy = 5;
public float spawnRadius = 2f;
private int currentEnemy = 0;
// Update is called once per frame
void Update () {
if(currentEnemy>=maxEnemy) return; // spawna apenas se nao chegou limite
cronometro += Time.deltaTime;
if (cronometro >= tempoPorSpawn) {
int randomLocal = Random.Range(0, locais.Length);
Vector3 pos = locais[randomLocal].position;
pos.x+= Mathf.Cos(Random.Range(0,359))*spawnRadius;
pos.z+= Mathf.Sin(Random.Range(0,359))*spawnRadius;
Instantiate(enemy[Random.Range (0,enemy.Length)],pos, transform.rotation);
cronometro = 0;
currentEnemy++; //aumenta +1
}
}
public void DecreaseEnemyCount(){
currentEnemy--;
if(currentEnemy<0)
currentEnemy = 0;
}
}
O que eu adicionei foi limitar o numero de inimigos, e quando spawnar adicionar uma posição aleatoria em circulo a mais para spawnar, sendo assim os inimigos nao irao spawnar exatamete no mesmo lugar mais bem proximo dentro de um raio determinado pela variavel spawnRadius. Não testei e fiz no notepad entao pode ter erros kk.
Re: Spawn de objetos
A resposta do Manawydan foi ótima para esse sistema.
Da última vez que fiz um sistema desse, adicionei a tag "Enemy" para todos os inimigos e utilizei um array para verificar quantos inimigos tinha em cena, desta forma:
Mas talvez fique um pouco pesado, já que a todo momento o array atualiza.
Da última vez que fiz um sistema desse, adicionei a tag "Enemy" para todos os inimigos e utilizei um array para verificar quantos inimigos tinha em cena, desta forma:
- Código:
public int maxEnemies;
private GameObject[] enemiesSpawned;
void Update(){
enemiesSpawned = new GameObject[0];
enemiesSpawned = GameObject.FindGameObjectsWithTag("Enemy");
if(enemiesSpawned.Lenght < maxEnemies){
//Spawn um novo inimigo
}
}
Mas talvez fique um pouco pesado, já que a todo momento o array atualiza.
George Lucas Vieira- Avançado
- PONTOS : 3391
REPUTAÇÃO : 132
Idade : 21
Áreas de atuação : Programação, Modelagem e Animação.
Respeito as regras :
Re: Spawn de objetos
Manawydan e George Lucas Vieira obrigado pela ajuda!! Vou ver se funciona quando der um tempo. Qualquer coisa converso com vcs. Obrigado mesmo!
Hardencio- Avançado
- PONTOS : 3719
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: Spawn de objetos
Gente, como eu chamo esse método DecreaseEnemyCount no script dos meus inimigos?
Tem que deixar static algo assim?
Tem que deixar static algo assim?
Hardencio- Avançado
- PONTOS : 3719
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: Spawn de objetos
Saudações Hardencio!
bom se você quer chamar este método a partir de outro script, você pode usar uma variável pública para isto, exemplo:
na variavel scriptSpawn você vai linkar o objeto que contem o script "Spawner"..... Aí você pode tirar esta parte do Input.GetMouse... e colocar o que realmente deve acontecer para este método ser chamado!
Dúvidas, estamos à disposição :D
bom se você quer chamar este método a partir de outro script, você pode usar uma variável pública para isto, exemplo:
- Código:
using UnityEngine;
using System.Collections;
public class Teste : MonoBehaviour {
public Spawner scriptSpawn;
void Start () {
}
void Update () {
if (Input.GetMouseButtonDown(1)) {
scriptSpawn.DecreaseEnemyCount ();
}
}
}
na variavel scriptSpawn você vai linkar o objeto que contem o script "Spawner"..... Aí você pode tirar esta parte do Input.GetMouse... e colocar o que realmente deve acontecer para este método ser chamado!
Dúvidas, estamos à disposição :D
JohnRambo- Moderador
- PONTOS : 5171
REPUTAÇÃO : 661
Idade : 24
Áreas de atuação : Unity;
Programação;
Música e Sonorização;
Graduado em Análise e Desenvolvimento de Sistemas;
Respeito as regras :
Tópicos semelhantes
» Spawn varios objetos
» Spawn de objetos (muito próximos)
» Carro dá spawn no ar
» [RESLVIDO] Unity - "transform.SetParent()" em 2 objetos move outros objetos
» Spawn de Cenarios
» Spawn de objetos (muito próximos)
» Carro dá spawn no ar
» [RESLVIDO] Unity - "transform.SetParent()" em 2 objetos move outros objetos
» Spawn de Cenarios
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos