Destruir Objeto por Distancia
2 participantes
Página 1 de 1
Destruir Objeto por Distancia
Entao pessoal eu estou fazendo um script aqui para ele destruir o objeto que estiver longe do player esta funcional so que ele esta destruindo todos os Objetos da lista eu queria que ele destruice apenas o que estiver longe alguem sabe como fazer isso?
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
public class InstanciadorVermelho : MonoBehaviour {
public GameObject[] Instanciados;
public Transform parent;
public List<Transform> Destinos = new List<Transform>(); //Lista de Destinos
public List<GameObject> ObjetosInstanciados = new List<GameObject>(); //Lista de Carros Instanciados
public List<GameObject> Objetos = new List<GameObject>(); //Lista de Carros para instanciar
public GameObject path; //Aqui é meu Objeto que tem os WayPoint
public GameObject Player; //Meu player kk
private float cronometro; //Float para Cronometro kk
public float tempoPorSpawn; //Float para intervalo entre os Spawn
public int maximoPorRodada; //Limite de carros que pode instanciar
public int numeroDeInstanciados; //Numero de Carros ja instanciador
public bool limitePorRodada; //Siple Boleana
public float Distancia; //float para verificar distancia
public int Indice; //Indice para passar info para outro Script
void Awake () { //Void para linka Automaticamente
path = GameObject.Find ("PathVermelho");
Player = GameObject.FindWithTag ("Player");
}
void Start (){//Aqui linka a lista de WayPoint Automaticamente
numeroDeInstanciados = 0;
limitePorRodada = false;
Transform[] pathTransforms = path.GetComponentsInChildren<Transform>();
Destinos = new List<Transform>();
for (int i = 0; i < pathTransforms.Length; i++) {
if (pathTransforms[i] != path.transform) {
Destinos.Add(pathTransforms[i]);
}
}
}
void Update (){
cronometro += Time.deltaTime;
if (cronometro >= tempoPorSpawn && numeroDeInstanciados <= maximoPorRodada && limitePorRodada == false) { //Aqui é meu if para ele verificar se pdoe instanciar
Indice = Random.Range (0, Destinos.Count);//Aqui ele faz um Random Simples
GameObject temp = Instantiate (Objetos [Random.Range (0, Objetos.Count)], Destinos [Indice].transform.position, transform.rotation) as GameObject;//Aqui ele faz um random e instancia
temp.transform.SetParent(parent);
cronometro = 0;//Zera o cronometro
//numeroDeInstanciados++;//aumenta +1 na Int
}
Instanciados = GameObject.FindGameObjectsWithTag ("CarrosVermelho");//Aqui ele pega os caros Instanciados com a Tag "CarrosVerdes" (Isso é para ele ter o GameObject para Destruir mais a frente)
for (int x = 0; x < Instanciados.Length; x++) {
if (Instanciados.Length != ObjetosInstanciados.Count) {//Nesse if ele ver se o numero de GameObject Instanciados é diferente de ObjetosInstanciados ( ObjetosInstanciados = a lista de objetos intanciados)
ObjetosInstanciados.Add (Instanciados [x]);//Se for diferente ele add +1;
}
for (int i = 0; i < ObjetosInstanciados.Count; i++) {
if (Vector3.Distance (ObjetosInstanciados [i].transform.position, Player.transform.position) > Distancia && ObjetosInstanciados.Count > 0 && Instanciados.Length > 0 && numeroDeInstanciados > 0) {//Verifica se os objetos estão longe do player se estiver...
Destroy (ObjetosInstanciados [i]);//Ele destroi
ObjetosInstanciados.Remove (ObjetosInstanciados [i]);//Remove da lista
ObjetosInstanciados.Remove (Instanciados [x]);//Remove da lista
}
}
numeroDeInstanciados = ObjetosInstanciados.Count;
}
if (numeroDeInstanciados < 0) {
numeroDeInstanciados = 0;
}
if (numeroDeInstanciados >= maximoPorRodada) {
limitePorRodada = true;
} else {
limitePorRodada = false;
}
}
}
Duarte- Programador
- PONTOS : 3354
REPUTAÇÃO : 97
Idade : 24
Áreas de atuação : Programação
Desenvolvedor Android
Respeito as regras :
Re: Destruir Objeto por Distancia
Geralmente não uso o Destroy para esse tipo de coisa eu uso o setactive.
Crie uma variavel distânciamáxima do tipo float e antes do if na linha 51 coloca sua variável distância para receber o vector3.distance e no if vc coloca
Crie uma variavel distânciamáxima do tipo float e antes do if na linha 51 coloca sua variável distância para receber o vector3.distance e no if vc coloca
- Código:
If(distância < distânciamáxima ... )
Destroy (objetosinstanciados(i))
Phph09- Profissional
- PONTOS : 3789
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: Destruir Objeto por Distancia
Eu consegui resolver esse problema de apenas o Objeto que estiver distante ser destruido agora eu quero instanciar apenas nos Destinos perto do player isso nao to conseguindo fazer.
Script de Instanciar:
Script de Destruir:
Alguem poderia me ajudar a fazer os Objetos serem instanciados apenas nos Destinos perto do player? eu tenho que criar outro toipic para outra Duvida!
Script de Instanciar:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
public class InstanciadorVermelho : MonoBehaviour {
public Transform parent;
public List<Transform> Destinos = new List<Transform>();
public List<GameObject> Objetos = new List<GameObject>();
public GameObject path; //Aqui é meu Objeto que tem os WayPoint
public GameObject Player; //Meu player kk
private float cronometro; //Float para Cronometro kk
public float tempoPorSpawn; //Float para intervalo entre os Spawn
public int maximoPorRodada; //Limite de carros que pode instanciar
public int numeroDeInstanciados; //Numero de Carros ja instanciador
public bool limitePorRodada; //Siple Boleana
public float Distancia; //float para verificar distancia
public int Indice; //Indice para passar info para outro Script
void Awake () { //Void para linka Automaticamente
path = GameObject.Find ("PathVermelho");
Player = GameObject.FindWithTag ("Player");
}
void Start (){//Aqui linka a lista de WayPoint Automaticamente
for (int i = 0; i < Destinos.Count; i++) {
GameObject temp = Instantiate (Objetos [Random.Range (0, Objetos.Count)], Destinos [i].transform.position, transform.rotation) as GameObject;//Aqui ele faz um random e instancia
temp.transform.SetParent(parent);
}
numeroDeInstanciados = 0;
limitePorRodada = false;
Transform[] pathTransforms = path.GetComponentsInChildren<Transform>();
Destinos = new List<Transform>();
for (int i = 0; i < pathTransforms.Length; i++) {
if (pathTransforms[i] != path.transform) {
Destinos.Add(pathTransforms[i]);
}
}
}
void Update (){
cronometro += Time.deltaTime;
if (cronometro >= tempoPorSpawn && numeroDeInstanciados <= maximoPorRodada && limitePorRodada == false) { //Aqui é meu if para ele verificar se pdoe instanciar
Indice = Random.Range (0, Destinos.Count);//Aqui ele faz um Random Simples
GameObject temp = Instantiate (Objetos [Random.Range (0, Objetos.Count)], Destinos [Indice].transform.position, transform.rotation) as GameObject;//Aqui ele faz um random e instancia
temp.transform.SetParent(parent);
cronometro = 0;//Zera o cronometro
numeroDeInstanciados++;//aumenta +1 na Int
}
if (numeroDeInstanciados < 0) {
numeroDeInstanciados = 0;
}
if (numeroDeInstanciados >= maximoPorRodada) {
limitePorRodada = true;
} else {
limitePorRodada = false;
}
}
}
Script de Destruir:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DestruidorVermelho : MonoBehaviour {
public GameObject Scp;
// Use this for initialization
void Awake () {
Scp = GameObject.Find ("InstanciadorVermelho");
}
// Update is called once per frame
void Update () {
InstanciadorVermelho script = Scp.GetComponent<InstanciadorVermelho> ();
if (Vector3.Distance (transform.position, script.Player.transform.position) > script.Distancia) {
script.numeroDeInstanciados--;
Destroy (gameObject);
}
}
}
Alguem poderia me ajudar a fazer os Objetos serem instanciados apenas nos Destinos perto do player? eu tenho que criar outro toipic para outra Duvida!
Duarte- Programador
- PONTOS : 3354
REPUTAÇÃO : 97
Idade : 24
Áreas de atuação : Programação
Desenvolvedor Android
Respeito as regras :
Re: Destruir Objeto por Distancia
Esse acho bem simples é só você ir no Script de instanciar e falar que só instância se estiver a uma distância menor que X do player
Phph09- Profissional
- PONTOS : 3789
REPUTAÇÃO : 240
Idade : 19
Respeito as regras :
Re: Destruir Objeto por Distancia
Ja pensei nisso so que como ele faz um random entre as posiçoes ele vai fazendo random ai se estiver na distancia determinada ele instancia, pesa mais o jogo e nstancia mt pouco, queria fazer para ele fazer o random apenas nas posiçoes que estiverem dentro da distancia determinada kk, mais Obrigado pela ajuda de odos!Phph09 escreveu:Esse acho bem simples é só você ir no Script de instanciar e falar que só instância se estiver a uma distância menor que X do player
Duarte- Programador
- PONTOS : 3354
REPUTAÇÃO : 97
Idade : 24
Áreas de atuação : Programação
Desenvolvedor Android
Respeito as regras :
Tópicos semelhantes
» Destruir um objeto!!!!
» Destruir objeto
» Destruir objeto com colisão
» Não consigo destruir o objeto!!!
» destruir objeto com o tempo
» Destruir objeto
» Destruir objeto com colisão
» Não consigo destruir o objeto!!!
» destruir objeto com o tempo
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos