script me deixando louco
4 participantes
Página 1 de 1
script me deixando louco
bom
so queria que meu script desse spawn das arvores a cada numero x de tempo,
e um numero x de arvores sem lugar fixo ,
so q isso faz respawn descontroladamente .
E quando mudo o start courotine e coloco na void start da certo so 10 arvores mas nunca mais faz a açao ,eu sei o pq disso mas nao sei como resolver em outra void pois tentei for if whale e nao consegui nd
so queria que meu script desse spawn das arvores a cada numero x de tempo,
e um numero x de arvores sem lugar fixo ,
so q isso faz respawn descontroladamente .
E quando mudo o start courotine e coloco na void start da certo so 10 arvores mas nunca mais faz a açao ,eu sei o pq disso mas nao sei como resolver em outra void pois tentei for if whale e nao consegui nd
- Código:
using UnityEngine;
using System.Collections;
public class SpawnArvores : MonoBehaviour {
public GameObject arvore;
public bool spawn;
void Start () {
spawn = false;
}
void Update () {
StartCoroutine ("spawnn");
if (spawn == true){
GameObject raio = Instantiate (arvore) as GameObject;
raio.transform.position = new Vector3 (Random.Range (5, 50), 0, Random.Range (5, 50));
}
}
IEnumerator spawnn(){
yield return new WaitForSeconds (10f);
spawn = true;
yield return new WaitForSeconds (0.2f);
spawn = false;
}
}
- Código:
using UnityEngine;
using System.Collections;
public class SpawnArvores : MonoBehaviour {
public GameObject arvore;
public bool spawn;
void Start () {
spawn = true; //aqui eu queria que ficasse false
}
void Update () {
if (spawn == true){ /// que dai ele nao instancia 300 arvores de uma vez, mas ele nem intancia dai com false ali em cima
GameObject raio = Instantiate (arvore) as GameObject;
raio.transform.position = new Vector3 (Random.Range (5, 50), 0, Random.Range (5, 50));
StartCoroutine ("spawnn");
}
}
IEnumerator spawnn(){
yield return new WaitForSeconds (10f);// aqui seria o tempo que eu colocaria uma vez ao dia pra dar respawn
spawn = true;
yield return new WaitForSeconds (0.2f);// mas fiz essa gambiarra toda por nao conseguir arrumar quando fazer e quando nao
spawn = false;
}
}
maikonluis- Membro
- PONTOS : 2962
REPUTAÇÃO : 4
Idade : 34
Respeito as regras :
Re: script me deixando louco
Não sei se é este seu objetivo, spawnar uma quantidade X de arvores, spawnando uma acada X de tempo. Se não for isso me corrija pf. Aqui segue um script de spawn de mobs que fiz, pode te ajudar:
public string nomeMob;
public Transform[] SpawnPoint;
public GameObject Mob;
public int qtd, qtdPresente;
public float respawnTimer;
private float RespawnTimer;
// Use this for initialization
void Start () {
Instantiate(Mob, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].position, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].rotation, transform);
Instantiate(Mob, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].position, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].rotation, transform);
Instantiate(Mob, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].position, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].rotation, transform);
RespawnTimer = respawnTimer;
qtdPresente = 3;
}
// Update is called once per frame
void Update () {
if (qtdPresente < qtd && respawnTimer <= 0)
{
Instantiate(Mob, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].position, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].rotation, transform);
qtdPresente++;
respawnTimer = RespawnTimer;
}
else if(respawnTimer > 0 && qtdPresente < qtd)
{
respawnTimer -= 1 * Time.deltaTime;
}
}
public string nomeMob;
public Transform[] SpawnPoint;
public GameObject Mob;
public int qtd, qtdPresente;
public float respawnTimer;
private float RespawnTimer;
// Use this for initialization
void Start () {
Instantiate(Mob, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].position, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].rotation, transform);
Instantiate(Mob, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].position, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].rotation, transform);
Instantiate(Mob, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].position, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].rotation, transform);
RespawnTimer = respawnTimer;
qtdPresente = 3;
}
// Update is called once per frame
void Update () {
if (qtdPresente < qtd && respawnTimer <= 0)
{
Instantiate(Mob, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].position, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].rotation, transform);
qtdPresente++;
respawnTimer = RespawnTimer;
}
else if(respawnTimer > 0 && qtdPresente < qtd)
{
respawnTimer -= 1 * Time.deltaTime;
}
}
mrariel2011- Avançado
- PONTOS : 3361
REPUTAÇÃO : 6
Idade : 25
Áreas de atuação : Modelagem(Basica)
Programação js, c#
Respeito as regras :
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: script me deixando louco
cara o script funcionou perfeito vejo o quanto sou ruim em programar ainda , ainda mais pq agora nao sei editar esse script na parte das cordenadas limites de spawnpoit pq ta saindo td no msm lugar kkkk vou estudar ele que dai vou achar muito obrigadomrariel2011 escreveu:Não sei se é este seu objetivo, spawnar uma quantidade X de arvores, spawnando uma acada X de tempo. Se não for isso me corrija pf. Aqui segue um script de spawn de mobs que fiz, pode te ajudar:
public string nomeMob;
public Transform[] SpawnPoint;
public GameObject Mob;
public int qtd, qtdPresente;
public float respawnTimer;
private float RespawnTimer;
// Use this for initialization
void Start () {
Instantiate(Mob, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].position, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].rotation, transform);
Instantiate(Mob, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].position, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].rotation, transform);
Instantiate(Mob, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].position, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].rotation, transform);
RespawnTimer = respawnTimer;
qtdPresente = 3;
}
// Update is called once per frame
void Update () {
if (qtdPresente < qtd && respawnTimer <= 0)
{
Instantiate(Mob, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].position, SpawnPoint[Random.Range(0, SpawnPoint.Length - 1)].rotation, transform);
qtdPresente++;
respawnTimer = RespawnTimer;
}
else if(respawnTimer > 0 && qtdPresente < qtd)
{
respawnTimer -= 1 * Time.deltaTime;
}
}
maikonluis- Membro
- PONTOS : 2962
REPUTAÇÃO : 4
Idade : 34
Respeito as regras :
Re: script me deixando louco
bom você tem que adicionar locais em na variável SpawnPoint mais precisamente Transform
só uma dica quando você for repetir muito o código faça um método para ele
só uma dica quando você for repetir muito o código faça um método para ele
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: script me deixando louco
Um exemplo de como poderia ficar com coroutine:
Nunca use Coroutine dentro do Update isso vai da problema de performance, na maioria das vezes ou voce usa coroutine ou usa Update.
Sempre que possivel evite variaveis publicas, se for querer linkar algo use [SerializeField]private
Tente não repetir codigo, uma boa forma é criando uma função(metodo) e chama-la diversas vezes, usando por exemplo laços de repetição
Essas sao alguma dicas que podem deixar seu codigo mais organizado e melhor.
- Código:
using UnityEngine;
using System.Collections;
public class TreeSpawner : MonoBehaviour {
[SerializeField]private GameObject treePrefab;
[SerializeField]private Transform[] spawnPoints;
[SerializeField]private float spawnTime = 1f;
[SerializeField]private int maxAmmount = 5;
private int currentAmmount = 0;
void Start(){
StartCoroutine (SpawnTree ());
}
IEnumerator SpawnTree(){
while (currentAmmount < maxAmmount) {
yield return new WaitForSeconds (spawnTime);
currentAmmount++;
int i = Random.Range (0, spawnPoints.Length);
Instantiate (treePrefab, spawnPoints [i].position, spawnPoints [i].rotation);
}
}
}
Nunca use Coroutine dentro do Update isso vai da problema de performance, na maioria das vezes ou voce usa coroutine ou usa Update.
Sempre que possivel evite variaveis publicas, se for querer linkar algo use [SerializeField]private
Tente não repetir codigo, uma boa forma é criando uma função(metodo) e chama-la diversas vezes, usando por exemplo laços de repetição
Essas sao alguma dicas que podem deixar seu codigo mais organizado e melhor.
Re: script me deixando louco
so que assim nao to entendendo pq spawna td no msm lugar e pelo que entendi tenho que criar um spawn pra cada arvore . mas nao era esse o objetivo eu queria tipo
no cenario vao ter 10 arvores
se eu cortar todas no msm dia ela vao dar respawn so no proximo dia
so que se nao so ira dar spawn do que faltar pra fexar 10 ate ai foi perfeito mas nao quero elas em lugar fixo .
e gostaria realmente de aprender onde estao meus erros e acertos o que mudar agradeço os scripts sao otimos mas nao acho justo usar o trabalho de outra pessoa levianamente
desde ja agradeço
no cenario vao ter 10 arvores
se eu cortar todas no msm dia ela vao dar respawn so no proximo dia
so que se nao so ira dar spawn do que faltar pra fexar 10 ate ai foi perfeito mas nao quero elas em lugar fixo .
e gostaria realmente de aprender onde estao meus erros e acertos o que mudar agradeço os scripts sao otimos mas nao acho justo usar o trabalho de outra pessoa levianamente
desde ja agradeço
maikonluis- Membro
- PONTOS : 2962
REPUTAÇÃO : 4
Idade : 34
Respeito as regras :
Re: script me deixando louco
- Código:
using UnityEngine;
using System.Collections;
public class SpawnArvores : MonoBehaviour {
public GameObject arvore;
public Transform[] spawnPoit;
public int qtd, qtdAtual;
public float respawnTimer;
private float RespawnTimer;
void Start ()
{
GameObject raio = Instantiate (arvore) as GameObject;
raio.transform.position = new Vector3 (Random.Range (5, 50), 0, Random.Range (5, 50));
qtdAtual = 1;
RespawnTimer = respawnTimer;
}
void Update () {
if (qtdAtual < qtd && respawnTimer <= 0)
{
GameObject raio = Instantiate (arvore) as GameObject;
raio.transform.position = new Vector3 (Random.Range (5, 50), 0, Random.Range (5, 50));
qtdAtual++;
respawnTimer = RespawnTimer;
}
else if(respawnTimer > 0 && qtdAtual < qtd)
{
respawnTimer -= 1 * Time.deltaTime;
}
}
}
maikonluis- Membro
- PONTOS : 2962
REPUTAÇÃO : 4
Idade : 34
Respeito as regras :
Tópicos semelhantes
» COMO DESATIVAR O SCRIPT "FisrtPersonController" DO PLAYER ATRAVÉS DE OUTRO SCRIPT
» Unity -TextMeshProUGUI- 1 das coisas q estão deixando a scene lenta p abrir
» Como acessar variável de um script usando outro script (Entre e entenda).
» Erro no Script There is no 'GameObject' attached to the "UMP45" game object, but a script is trying to access it
» Meu script de Movimento não deixa meu script do Pulo duplo funcionar.
» Unity -TextMeshProUGUI- 1 das coisas q estão deixando a scene lenta p abrir
» Como acessar variável de um script usando outro script (Entre e entenda).
» Erro no Script There is no 'GameObject' attached to the "UMP45" game object, but a script is trying to access it
» Meu script de Movimento não deixa meu script do Pulo duplo funcionar.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos