Script funciona pela metade (?)
3 participantes
Página 1 de 1
Script funciona pela metade (?)
Boa tarde!
Estou trabalhando num projeto 3D do meu curso e havia criado um script para colete de gemas (Pedras) que funcionava muito bem, quando tentei adicionar a coleta de chaves nesse mesmo script ele começou a bugar, por exemplo:
- Só consigo coletar 1 gema e 1 chave, depois ele para de funcionar e não coleta mais e tambem faz com que eu não tome dano na lava que antes tomava (?).
Gostaria da ajuda de vocês para resolver esse empecilho, agradeço desde já!
(Já tentei colocar alguns "if" num FixedUpdate())
Estou trabalhando num projeto 3D do meu curso e havia criado um script para colete de gemas (Pedras) que funcionava muito bem, quando tentei adicionar a coleta de chaves nesse mesmo script ele começou a bugar, por exemplo:
- Só consigo coletar 1 gema e 1 chave, depois ele para de funcionar e não coleta mais e tambem faz com que eu não tome dano na lava que antes tomava (?).
Gostaria da ajuda de vocês para resolver esse empecilho, agradeço desde já!
(Já tentei colocar alguns "if" num FixedUpdate())
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class Vida : MonoBehaviour
{
public int vida = 3;
public float vigor = 100.0f;
public Text vigorTxt;
public GameObject a,b,c; // GAMEOBJECTS DA VIDA
public GameObject d,e,f; // IMAGENS DAS GEMAS NO CANVAS
public GameObject g,h,i; // GAMEOBJECTS DAS GEMAS
public GameObject j,k; // GAMEOBJECTS DAS CHAVES
public GameObject l,m; // IMAGENS DAS CHAVES NO CANVAS
float distancia = 1;
float distancia2 = 2;
void Start()
{
d.SetActive(false); // DESATIVA A IMAGEM DE UMA GEMA NO CANVAS QUANDO O JOGO INICIA
e.SetActive(false); // DESATIVA A IMAGEM DE UMA GEMA NO CANVAS QUANDO O JOGO INICIA
f.SetActive(false); // DESATIVA A IMAGEM DE UMA GEMA NO CANVAS QUANDO O JOGO INICIA
l.SetActive(false); // DESATIVA A IMAGEM DE UMA CHAVE NO CANVAS QUANDO O JOGO INICIA
m.SetActive(false); // DESATIVA A IMAGEM DE UMA CHAVE NO CANVAS QUANDO O JOGO INICIA
}
void Update()
{
float dist = Vector3.Distance(transform.position,i.transform.position); // MEDE A DISTANCIA ENTRE O JOGADOR E A GEMA I
float dist2 = Vector3.Distance(transform.position,h.transform.position); // MEDE A DISTANCIA ENTRE O JOGADOR E A GEMA H
float dist3 = Vector3.Distance(transform.position,g.transform.position); // MEDE A DISTANCIA ENTRE O JOGADOR E A GEMA G
float dist4 = Vector3.Distance(transform.position,j.transform.position); // MEDE A DISTANCIA ENTRE O JOGADOR E A CHAVE J
float dist5 = Vector3.Distance(transform.position,k.transform.position); // MEDE A DISTANCIA ENTRE O JOGADOR E A CHAVE K
if (dist <= distancia)
{
d.SetActive(true);
Destroy(i);
}
if (dist2 <= distancia)
{
f.SetActive(true);
Destroy(h);
}
if (dist3 <= distancia)
{
e.SetActive(true);
Destroy(g);
}
if (dist4 <= distancia2)
{
l.SetActive(true);
Destroy(j);
}
if (dist5 <= distancia2)
{
m.SetActive(true);
Destroy(k);
}
if (vida == 2)
{
c.SetActive(false);
}
if (vida == 1)
{
b.SetActive(false);
}
if (vida <= 0)
{
a.SetActive(false);
SceneManager.LoadScene("Jogo");
}
vigorTxt.text = "Vigor: " + vigor.ToString();
if (vigor <= 0)
{
vida--;
vigor = 100f;
}
}
void OnTriggerStay(Collider col)
{
StartCoroutine(tempo());
IEnumerator tempo()
{
if (col.gameObject.tag == "lava")
{
vigor--;
yield return new WaitForSeconds(1);
}
}
}
}
maxwarnava- Membro
- PONTOS : 1819
REPUTAÇÃO : 3
Respeito as regras :
Re: Script funciona pela metade (?)
se funciona pela metade, tu deve ter feito uma confusão com esse monte de {} dos if's
baixa o puglin rainbow brackets e sempre usa a tecla tab para separar os blocos que nem é feito no python que evita esse tipo de confusão
baixa o puglin rainbow brackets e sempre usa a tecla tab para separar os blocos que nem é feito no python que evita esse tipo de confusão
Re: Script funciona pela metade (?)
> Vê se Isso Resolve (dei uma pequena modificada):
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public sealed class Vida : MonoBehaviour
{
public int vida = 3;
public float vigor = 100.0f;
public Text vigorTxt;
public GameObject a,b,c; // GAMEOBJECTS DA VIDA
public GameObject d,e,f; // IMAGENS DAS GEMAS NO CANVAS
public GameObject g,h,i; // GAMEOBJECTS DAS GEMAS
public GameObject j,k; // GAMEOBJECTS DAS CHAVES
public GameObject l,m; // IMAGENS DAS CHAVES NO CANVAS
float distancia = 1;
float distancia2 = 2;
void Start()
{
// DESATIVA A IMAGEM DE UMA GEMA NO CANVAS QUANDO O JOGO INICIA
d.SetActive(false);
e.SetActive(false);
f.SetActive(false);
// DESATIVA A IMAGEM DE UMA CHAVE NO CANVAS QUANDO O JOGO INICIA
l.SetActive(false);
m.SetActive(false);
}
void Update()
{
MedirDistancia();
ChecandoDistancia();
DesativandoVidas();
UpdateVigor();
}
void OnTriggerStay(Collider col)
{
if (col.gameObject.tag == "lava")
StartCoroutine(tempo());
}
IEnumerator tempo()
{
yield return new WaitForSeconds(1);
vigor--;
{
private void MedirDistancia()
{
// MEDE A DISTANCIA ENTRE O JOGADOR E AS GEMAS
float dist = Vector3.Distance(transform.position,i.transform.position);
float dist2 = Vector3.Distance(transform.position,h.transform.position);
float dist3 = Vector3.Distance(transform.position,g.transform.position);
// MEDE A DISTANCIA ENTRE O JOGADOR E AS CHAVES
float dist4 = Vector3.Distance(transform.position,j.transform.position);
float dist5 = Vector3.Distance(transform.position,k.transform.position);
}
private void ChecandoDistancia()
{
if (dist <= distancia)
{
d.SetActive(true);
Destroy(i);
}
if (dist2 <= distancia)
{
f.SetActive(true);
Destroy(h);
}
if (dist3 <= distancia)
{
e.SetActive(true);
Destroy(g);
}
if (dist4 <= distancia2)
{
l.SetActive(true);
Destroy(j);
}
if (dist5 <= distancia2)
{
m.SetActive(true);
Destroy(k);
}
}
private void DesativandoVidas()
{
if (vida == 2)
c.SetActive(false);
else if (vida == 1)
b.SetActive(false);
else if (vida <= 0)
{
a.SetActive(false);
SceneManager.LoadScene("Jogo");
}
}
private void UpdateVigor()
{
if (vigor <= 0)
{
vida--;
vigor = 100f;
}
vigorTxt.text = "Vigor: " + vigor.ToString();
}
}
Magnatah- Instrutor
- PONTOS : 3548
REPUTAÇÃO : 209
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras :
Re: Script funciona pela metade (?)
Boa noite, obrigado pelo seu esforço em me ajudar, eu verifiquei duas coisas que me ajudaram a resolver esse problema, segue:
1 - Por algum motivo nos scripts que o professor mandou já vinha um chamado "Instancia Pedra" que por algum motivo estava bem escondido e eu só achei quando iniciei o jogo com a tela "Scene" aberta do lado e vi as pedras spawnando do lado de fora do mapa aos montes.
2 - Por algum motivo o Unity tava dando problema com esses "Destroy(k);", quando decidi trocar os mesmos por desativações "(k.SetActive(false);" ele funcionou perfeitamente, agora, será que a Unity é limitada, será que o meu PC é o problema, sera que a minha forma de programar é o problema?
1 - Por algum motivo nos scripts que o professor mandou já vinha um chamado "Instancia Pedra" que por algum motivo estava bem escondido e eu só achei quando iniciei o jogo com a tela "Scene" aberta do lado e vi as pedras spawnando do lado de fora do mapa aos montes.
2 - Por algum motivo o Unity tava dando problema com esses "Destroy(k);", quando decidi trocar os mesmos por desativações "(k.SetActive(false);" ele funcionou perfeitamente, agora, será que a Unity é limitada, será que o meu PC é o problema, sera que a minha forma de programar é o problema?
maxwarnava- Membro
- PONTOS : 1819
REPUTAÇÃO : 3
Respeito as regras :
Re: Script funciona pela metade (?)
maxwarnava escreveu:Boa noite, obrigado pelo seu esforço em me ajudar, eu verifiquei duas coisas que me ajudaram a resolver esse problema, segue:
1 - Por algum motivo nos scripts que o professor mandou já vinha um chamado "Instancia Pedra" que por algum motivo estava bem escondido e eu só achei quando iniciei o jogo com a tela "Scene" aberta do lado e vi as pedras spawnando do lado de fora do mapa aos montes.
2 - Por algum motivo o Unity tava dando problema com esses "Destroy(k);", quando decidi trocar os mesmos por desativações "(k.SetActive(false);" ele funcionou perfeitamente, agora, será que a Unity é limitada, será que o meu PC é o problema, sera que a minha forma de programar é o problema?
Ficar Instanciando e Destruindo Objetos Direto no Update, com certeza vai fazer o processador chorar.
Lê esse Tópico Vai te ajudar bastante:
LINK
Magnatah- Instrutor
- PONTOS : 3548
REPUTAÇÃO : 209
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras :
Tópicos semelhantes
» Como localizar um objeto pela Tag no script?
» [RESOLVIDO] Onde ta o erro no meu script (SeguirInimigo) pela posição ? #HELP
» Jogo rejeitado pela Google Play
» como desativar objetos pela tag?
» Script para mostrar a nota final do jogador?
» [RESOLVIDO] Onde ta o erro no meu script (SeguirInimigo) pela posição ? #HELP
» Jogo rejeitado pela Google Play
» como desativar objetos pela tag?
» Script para mostrar a nota final do jogador?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos