[AJUDA] Drop infinito xD
3 participantes
Página 1 de 1
[AJUDA] Drop infinito xD
Alguem poderia me ajudar? Usando meu script de recursos, Quando quebro uma pedra ele está dropando infinitamente pedras como no print abaixo
Meu script:
Se alguem puder tb mudar pra que o item (public GameObject[] Rocas;) drope as pedras de acordo com o minimo definido na variavel (Minimo) e o maximo (Minimo), meio que criar um random entre eles no drop da pedra xD
Erro que está dando:
Pedras.Update () (at Assets/Scripts/Recursos/Pedras.cs:55)
Meu script:
- Código:
using UnityEngine;
using System.Collections;
public class Pedras : MonoBehaviour {
public float Salud;
[HideInInspector]
public float Salud2 = 10;
[Header("Distancia Maxima Causa Dano")]
public float MaxDis = 2;
public GameObject[] Rocas;
[Header("Tempo Respawn Pedra")]
public float TiempoReaparece = 5;
[HideInInspector]
public float TiempoReaparece2 = 5;
[Header("Stacks aleatorios")]
public int Minimo = 1;
public int Maximo = 5;
private Camera camara;
private bool Reaparece;
[Header("Danos E Player")]
public float danTotal;
// Use this for initialization
void Start () {
camara = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
danTotal = 20;
}
// Update is called once per frame
void Update ()
{
Ray ray = camara.ViewportPointToRay(new Vector3(0.5F, 0.5F, 0));
RaycastHit hit;
if (Physics.Raycast(ray, out hit, MaxDis))
{
if(hit.collider.gameObject == gameObject)
{
if(Input.GetKey ("e"))
{
Salud2 -= danTotal * Time.deltaTime;
}
}
}
if(Salud2 <= 0.5f && !Reaparece)
{
gameObject.GetComponent<BoxCollider>().enabled = false;
gameObject.GetComponent<MeshRenderer>().enabled = false;
foreach(GameObject Roca in Rocas)
{
GameObject Clon = Instantiate(Roca,transform.position + transform.up * Random.Range(1,5) ,transform.rotation)as GameObject;
Clon.GetComponent<Stacks>().Stack = Random.Range(Minimo,Maximo);
// Destroy(gameObject);
}
Reaparece = true;
}
if(Reaparece)
{
TiempoReaparece2 -= Time.deltaTime;
if(TiempoReaparece2 <= 0)
{
Salud2 = Salud;
gameObject.GetComponent<BoxCollider>().enabled = true;
gameObject.GetComponent<MeshRenderer>().enabled = true;
TiempoReaparece2 = TiempoReaparece;
Reaparece = false;
}
}
}
}
Se alguem puder tb mudar pra que o item (public GameObject[] Rocas;) drope as pedras de acordo com o minimo definido na variavel (Minimo) e o maximo (Minimo), meio que criar um random entre eles no drop da pedra xD
Erro que está dando:
Pedras.Update () (at Assets/Scripts/Recursos/Pedras.cs:55)
WiredD- Avançado
- PONTOS : 3325
REPUTAÇÃO : 14
Respeito as regras :
Re: [AJUDA] Drop infinito xD
- Código:
using UnityEngine;
using System.Collections;
public class Pedras : MonoBehaviour
{
public float Salud;
[HideInInspector]
public float Salud2 = 10;
[Header("Distancia Maxima Causa Dano")]
public float MaxDis = 2;
public GameObject[] Rocas;
[Header("Tempo Respawn Pedra")]
public float TiempoReaparece = 5;
[HideInInspector]
public float TiempoReaparece2 = 5;
[Header("Stacks aleatorios")]
public int Minimo = 1;
public int Maximo = 5;
private Camera camara;
private bool Reaparece;
[Header("Danos E Player")]
public float danTotal;
public int limite = 1, currentLimite;
// Use this for initialization
void Start()
{
camara = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
danTotal = 20;
}
// Update is called once per frame
void Update()
{
Ray ray = camara.ViewportPointToRay(new Vector3(0.5F, 0.5F, 0));
RaycastHit hit;
if (Physics.Raycast(ray, out hit, MaxDis))
{
if (hit.collider.gameObject == gameObject)
{
if (Input.GetKey("e"))
{
Salud2 -= danTotal * Time.deltaTime;
}
}
}
if (Salud2 <= 0.5f && !Reaparece)
{
gameObject.GetComponent<BoxCollider>().enabled = false;
gameObject.GetComponent<MeshRenderer>().enabled = false;
foreach (GameObject Roca in Rocas)
{
if (currentLimite < limite)
{
GameObject Clon = Instantiate(Roca, transform.position + transform.up * Random.Range(1, 5), transform.rotation) as GameObject;
Clon.GetComponent<Stacks>().Stack = Random.Range(Minimo, Maximo);
currentLimite++;
}
// Destroy(gameObject);
}
Reaparece = true;
}
if (Reaparece)
{
TiempoReaparece2 -= Time.deltaTime;
if (TiempoReaparece2 <= 0)
{
Salud2 = Salud;
gameObject.GetComponent<BoxCollider>().enabled = true;
gameObject.GetComponent<MeshRenderer>().enabled = true;
TiempoReaparece2 = TiempoReaparece;
Reaparece = false;
}
}
}
}
Goustkor- Avançado
- PONTOS : 3073
REPUTAÇÃO : 18
Respeito as regras :
Re: [AJUDA] Drop infinito xD
Goustkor escreveu:Eu simplesmente tentei colocar um limite de vezes que ele pode instanciar, tenta ver se funciona
- Código:
using UnityEngine;
using System.Collections;
public class Pedras : MonoBehaviour
{
public float Salud;
[HideInInspector]
public float Salud2 = 10;
[Header("Distancia Maxima Causa Dano")]
public float MaxDis = 2;
public GameObject[] Rocas;
[Header("Tempo Respawn Pedra")]
public float TiempoReaparece = 5;
[HideInInspector]
public float TiempoReaparece2 = 5;
[Header("Stacks aleatorios")]
public int Minimo = 1;
public int Maximo = 5;
private Camera camara;
private bool Reaparece;
[Header("Danos E Player")]
public float danTotal;
public int limite = 1, currentLimite;
// Use this for initialization
void Start()
{
camara = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
danTotal = 20;
}
// Update is called once per frame
void Update()
{
Ray ray = camara.ViewportPointToRay(new Vector3(0.5F, 0.5F, 0));
RaycastHit hit;
if (Physics.Raycast(ray, out hit, MaxDis))
{
if (hit.collider.gameObject == gameObject)
{
if (Input.GetKey("e"))
{
Salud2 -= danTotal * Time.deltaTime;
}
}
}
if (Salud2 <= 0.5f && !Reaparece)
{
gameObject.GetComponent<BoxCollider>().enabled = false;
gameObject.GetComponent<MeshRenderer>().enabled = false;
foreach (GameObject Roca in Rocas)
{
if (currentLimite < limite)
{
GameObject Clon = Instantiate(Roca, transform.position + transform.up * Random.Range(1, 5), transform.rotation) as GameObject;
Clon.GetComponent<Stacks>().Stack = Random.Range(Minimo, Maximo);
currentLimite++;
}
// Destroy(gameObject);
}
Reaparece = true;
}
if (Reaparece)
{
TiempoReaparece2 -= Time.deltaTime;
if (TiempoReaparece2 <= 0)
{
Salud2 = Salud;
gameObject.GetComponent<BoxCollider>().enabled = true;
gameObject.GetComponent<MeshRenderer>().enabled = true;
TiempoReaparece2 = TiempoReaparece;
Reaparece = false;
}
}
}
}
Funcionou não como pode ver aqui:
E agora deu o erro na mesma linha também xD
Erro:
Pedras.Update () (at Assets/Scripts/Recursos/Pedras.cs:60)
If com o erro:
- Código:
if (Salud2 <= 0.5f && !Reaparece)
{
gameObject.GetComponent<BoxCollider>().enabled = false;
gameObject.GetComponent<MeshRenderer>().enabled = false;
foreach (GameObject Roca in Rocas)
{
if (currentLimite < limite)
{
GameObject Clon = Instantiate(Roca, transform.position + transform.up * Random.Range(1, 5), transform.rotation) as GameObject;
Clon.GetComponent<Stacks>().Stack = Random.Range(Minimo, Maximo);
currentLimite++;
}
// Destroy(gameObject);
}
Reaparece = true;
}
Nesta linha:
Clon.GetComponent<Stacks>().Stack = Random.Range(Minimo, Maximo);
WiredD- Avançado
- PONTOS : 3325
REPUTAÇÃO : 14
Respeito as regras :
Re: [AJUDA] Drop infinito xD
O erro é que você não está conseguindo se comunicar com o script "Stacks". Você tem um script em cena com este nome exatamente?
se tiver, poderia postá-lo?
se tiver, poderia postá-lo?
Re: [AJUDA] Drop infinito xD
MarcosSchultz escreveu:O erro é que você não está conseguindo se comunicar com o script "Stacks". Você tem um script em cena com este nome exatamente?
se tiver, poderia postá-lo?
xD
- Código:
using UnityEngine;
using System.Collections;
//using UnityEngine.UI;
public class Stacks : MonoBehaviour {
public int Stack;
}
Ele só guarda um valor int da variable Stacks
WiredD- Avançado
- PONTOS : 3325
REPUTAÇÃO : 14
Respeito as regras :
Re: [AJUDA] Drop infinito xD
o objeto "Roca" que você instancia, possui em si um script "Stacks" linkado?
Re: [AJUDA] Drop infinito xD
MarcosSchultz escreveu:o objeto "Roca" que você instancia, possui em si um script "Stacks" linkado?
Sim xD
Porem ela esta agora dropando apenas 1 mesmo modificando as int do stacks.cs, sabe qual o motivo?
WiredD- Avançado
- PONTOS : 3325
REPUTAÇÃO : 14
Respeito as regras :
Re: [AJUDA] Drop infinito xD
OK, então agora parou de dar o erro? ou continua dando o erro na mesma linha?
Re: [AJUDA] Drop infinito xD
MarcosSchultz escreveu:OK, então agora parou de dar o erro? ou continua dando o erro na mesma linha?
Parou o erro, porem agora só dropa 1 mesmo mudando o stack do item
WiredD- Avançado
- PONTOS : 3325
REPUTAÇÃO : 14
Respeito as regras :
Re: [AJUDA] Drop infinito xD
Pelo que eu vi, o instantiate é feito somente uma vez... e isto dentro do foreach das rochas... então se você só tiver uma rocha linkada, ela será instanciada apenas uma vez.
teria que fazer um for para instanciar várias.
teria que fazer um for para instanciar várias.
Re: [AJUDA] Drop infinito xD
MarcosSchultz escreveu:Pelo que eu vi, o instantiate é feito somente uma vez... e isto dentro do foreach das rochas... então se você só tiver uma rocha linkada, ela será instanciada apenas uma vez.
teria que fazer um for para instanciar várias.
Entendi, e como posso fazer isso?
WiredD- Avançado
- PONTOS : 3325
REPUTAÇÃO : 14
Respeito as regras :
Re: [AJUDA] Drop infinito xD
Tente isto:
- Código:
using UnityEngine;
using System.Collections;
public class Pedras : MonoBehaviour
{
public float Salud;
[HideInInspector]
public float Salud2 = 10;
[Header("Distancia Maxima Causa Dano")]
public float MaxDis = 2;
public GameObject[] Rocas;
[Header("Tempo Respawn Pedra")]
public float TiempoReaparece = 5;
[HideInInspector]
public float TiempoReaparece2 = 5;
[Header("Stacks aleatorios")]
public int Minimo = 1;
public int Maximo = 5;
private Camera camara;
private bool Reaparece;
[Header("Danos E Player")]
public float danTotal;
public int limite = 1, currentLimite;
public int numeroDePedras = 10;
// Use this for initialization
void Start()
{
camara = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
danTotal = 20;
}
// Update is called once per frame
void Update()
{
Ray ray = camara.ViewportPointToRay(new Vector3(0.5F, 0.5F, 0));
RaycastHit hit;
if (Physics.Raycast(ray, out hit, MaxDis))
{
if (hit.collider.gameObject == gameObject)
{
if (Input.GetKey("e"))
{
Salud2 -= danTotal * Time.deltaTime;
}
}
}
if (Salud2 <= 0.5f && !Reaparece)
{
gameObject.GetComponent<BoxCollider>().enabled = false;
gameObject.GetComponent<MeshRenderer>().enabled = false;
foreach (GameObject Roca in Rocas)
{
if (currentLimite < limite)
{
for (int x = 0; x < numeroDePedras; x++) {
GameObject Clon = Instantiate (Roca, transform.position + transform.up * Random.Range (1, 5), transform.rotation) as GameObject;
Clon.GetComponent<Stacks>().Stack = Random.Range(Minimo, Maximo);
currentLimite++;
}
}
// Destroy(gameObject);
}
Reaparece = true;
}
if (Reaparece)
{
TiempoReaparece2 -= Time.deltaTime;
if (TiempoReaparece2 <= 0)
{
Salud2 = Salud;
gameObject.GetComponent<BoxCollider>().enabled = true;
gameObject.GetComponent<MeshRenderer>().enabled = true;
TiempoReaparece2 = TiempoReaparece;
Reaparece = false;
}
}
}
}
Re: [AJUDA] Drop infinito xD
MarcosSchultz escreveu:Tente isto:
- Código:
using UnityEngine;
using System.Collections;
public class Pedras : MonoBehaviour
{
public float Salud;
[HideInInspector]
public float Salud2 = 10;
[Header("Distancia Maxima Causa Dano")]
public float MaxDis = 2;
public GameObject[] Rocas;
[Header("Tempo Respawn Pedra")]
public float TiempoReaparece = 5;
[HideInInspector]
public float TiempoReaparece2 = 5;
[Header("Stacks aleatorios")]
public int Minimo = 1;
public int Maximo = 5;
private Camera camara;
private bool Reaparece;
[Header("Danos E Player")]
public float danTotal;
public int limite = 1, currentLimite;
public int numeroDePedras = 10;
// Use this for initialization
void Start()
{
camara = GameObject.FindWithTag("MainCamera").GetComponent<Camera>();
danTotal = 20;
}
// Update is called once per frame
void Update()
{
Ray ray = camara.ViewportPointToRay(new Vector3(0.5F, 0.5F, 0));
RaycastHit hit;
if (Physics.Raycast(ray, out hit, MaxDis))
{
if (hit.collider.gameObject == gameObject)
{
if (Input.GetKey("e"))
{
Salud2 -= danTotal * Time.deltaTime;
}
}
}
if (Salud2 <= 0.5f && !Reaparece)
{
gameObject.GetComponent<BoxCollider>().enabled = false;
gameObject.GetComponent<MeshRenderer>().enabled = false;
foreach (GameObject Roca in Rocas)
{
if (currentLimite < limite)
{
for (int x = 0; x < numeroDePedras; x++) {
GameObject Clon = Instantiate (Roca, transform.position + transform.up * Random.Range (1, 5), transform.rotation) as GameObject;
Clon.GetComponent<Stacks>().Stack = Random.Range(Minimo, Maximo);
currentLimite++;
}
}
// Destroy(gameObject);
}
Reaparece = true;
}
if (Reaparece)
{
TiempoReaparece2 -= Time.deltaTime;
if (TiempoReaparece2 <= 0)
{
Salud2 = Salud;
gameObject.GetComponent<BoxCollider>().enabled = true;
gameObject.GetComponent<MeshRenderer>().enabled = true;
TiempoReaparece2 = TiempoReaparece;
Reaparece = false;
}
}
}
}
Marcos, quando quebro a primeira pedra ele dropa o valor de pedras setados corretamente, mais depois quando ela respawna, ele já não dropa mais nenhuma quando quebro a mesma
WiredD- Avançado
- PONTOS : 3325
REPUTAÇÃO : 14
Respeito as regras :
Re: [AJUDA] Drop infinito xD
Cara, eu precisaria ver como você está montando este projeto... como é feito esse spawn e o que está interferindo.
Tópicos semelhantes
» ajuda com o sistema de drag and drop com controle no invetario
» Terreno infinito
» Gerador infinito de Obstaculos 2D
» Drag and drop Assets
» Como fazer um corredor ''infinito'' na unity?
» Terreno infinito
» Gerador infinito de Obstaculos 2D
» Drag and drop Assets
» Como fazer um corredor ''infinito'' na unity?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos