A comunidade brasileira de desenvolvimento e programação de jogos.
Bem-vindo: Qua Dez 02, 2020 9:49 am

Todos os horários são GMT - 3 horas




Criar novo tópico Responder  [ 2 mensagens ] 
Autor Mensagem
 Título: Unity travando na hora do Play
MensagemEnviado: Qua Out 02, 2019 1:36 pm 
Offline
Membro novo

Registrado em: Sex Set 13, 2019 2:10 pm
Mensagens: 6
Boa tarde gente. Então, estou fazendo um jogo de com objetivo de fazer reciclagem. Nisso, eu fiz um script que até a primeira parte estava funcionando de boas. Porém, eu tive que botar um while no meu código, pois preciso que execute um loop até que a função seja falsa. E nisso, quando eu salvei e fui dar play, meu unity comecou a travar. Alguém poderia me ajudar ? Vou deixar o código aqui embaixo em duas partes. A primeira seria o código sem o unity travar e o segundo é com ele travando.

Código 1 ( o que não trava ) \/

Código:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class Coletar : MonoBehaviour
    {
        /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 

        int organico;
        int vidro;
        int papel;
        int metal;
        int plastico;


        /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 
       

        void Start()
        {
            organico = 0;
            vidro = 0;
            papel = 0;
            metal = 0;
            plastico = 0;
        }

        /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 

        void Update()
        {
           
        }
        /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 
       

        private void OnTriggerEnter2D(Collider2D collision2D)
        {

            if (collision2D.gameObject.CompareTag("organico"))
            {
                int organico = 1;
                Destroy(collision2D.gameObject);

     
                }



            }

            if (collision2D.gameObject.CompareTag("vidro"))
            {
                int vidro = 1;

                Destroy(collision2D.gameObject);

            }

            if (collision2D.gameObject.CompareTag("papel"))
            {
                int papel = 1;

                Destroy(collision2D.gameObject);

            }
            if (collision2D.gameObject.CompareTag("metal"))
            {
                int metal = 1;

                Destroy(collision2D.gameObject);

            }
            if (collision2D.gameObject.CompareTag("plastico"))
            {
                int plastico = 1;

                Destroy(collision2D.gameObject);

            }

        }

        /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 


    } // class


Código 2 ( o que trava ) \/

Código:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class Coletar : MonoBehaviour
    {
        /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 

        int organico;
        int vidro;
        int papel;
        int metal;
        int plastico;


        /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 
       

        void Start()
        {
            organico = 0;
            vidro = 0;
            papel = 0;
            metal = 0;
            plastico = 0;
        }

        /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 

        void Update()
        {
           
        }
        /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 
       

        private void OnTriggerEnter2D(Collider2D collision2D)
        {

            if (collision2D.gameObject.CompareTag("organico"))
            {
                int organico = 1;
                Destroy(collision2D.gameObject);

                while (organico == 1)
                {
                    if (collision2D.gameObject.CompareTag("plastico"))
                    {
                        int plastico = 0;
                        GetComponent<Collider>().enabled = false;
                        //   DontDestroyOnLoad(collision2D.gameObject);

                    }
                }



            }

            if (collision2D.gameObject.CompareTag("vidro"))
            {
                int vidro = 1;

                Destroy(collision2D.gameObject);

            }

            if (collision2D.gameObject.CompareTag("papel"))
            {
                int papel = 1;

                Destroy(collision2D.gameObject);

            }
            if (collision2D.gameObject.CompareTag("metal"))
            {
                int metal = 1;

                Destroy(collision2D.gameObject);

            }
            if (collision2D.gameObject.CompareTag("plastico"))
            {
                int plastico = 1;

                Destroy(collision2D.gameObject);

            }

        }

        /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 


    } // class




Voltar ao topo
 Perfil  
 
 Título: Re: Unity travando na hora do Play
MensagemEnviado: Qui Out 03, 2019 10:22 am 
Offline
Membro novo

Registrado em: Sex Set 13, 2019 2:10 pm
Mensagens: 6
Ruy R.S.F. escreveu:
opa cara, boa tarde, eu vi la sua outra duvida assim que eu tiver tempo vou instalar o 2d extras pack e vou montar um tuto pra te mostrar, blz?

sobre sua duvida atual é o seguinte: cara esse while que você colocou é um loop infinito, por isso que ele trava.

vc não deve fazer isso, a condição do while deve ser verdadeira para entrar mas em algum momento deve ser falsa para poder sair do loop.

a condição desse seu while nunca fica falso por isso ele nunca sairá do loop.

pense melhor como você poderá melhorar o seu código

eu vi que você declarou a variável com mesmo nome em vários locais, talvez você esteja com dúvidas sobre o escopo das variáveis.

veja o tutorial em unity3d.com/pt/learn/tutorials/topics/scripting/scope-and-access-modifiers

Espero ter ajudado :)



Obrigado irmão! Eu corrigi o script. E muito obrigado pela ajuda no outro tópico, também estou precisando bastante. Vou postar abaixo como fiz o que eu queria utilizando outro método.


Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Coletar : MonoBehaviour
{
    /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 

    public bool lixo;
   
   public bool organico;
   public bool vidro;
   public bool papel;
   public bool metal;
   public bool plastico;


    /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 
   

    void Start()
    {
        lixo = false;
        organico = false;
        vidro = false;
        papel = false;
        metal = false;
        plastico = false;
    }

    /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 

    void Update()
    {
       
    }
    /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 




    /////////////////////    /////////////////////    /////////////////////    /////////////////////    /////////////////////    /////////

                                                                                 //     LIXEIRA     \\ 

    private void OnCollisionEnter2D(Collision2D collision2D)
    {


        if (collision2D.gameObject.CompareTag("lixo-organico"))
        {
            if (lixo)
            {

                if (organico)
                {

                lixo = false;
                organico = false;
                vidro = false;
                papel = false;
                metal = false;
                plastico = false;

                } else
                {
                    lixo = false;
                    organico = false;
                    vidro = false;
                    papel = false;
                    metal = false;
                    plastico = false;
                }

            }
        }

        if (collision2D.gameObject.CompareTag("lixo-plastico"))
        {
            if (lixo)
            {

                if (plastico)
                {

                    lixo = false;
                    organico = false;
                    vidro = false;
                    papel = false;
                    metal = false;
                    plastico = false;

                }
                else
                {
                    lixo = false;
                    organico = false;
                    vidro = false;
                    papel = false;
                    metal = false;
                    plastico = false;
                }

            }
        }

        if (collision2D.gameObject.CompareTag("lixo-vidro"))
        {
            if (lixo)
            {


                if (vidro)
                {

                    lixo = false;
                    organico = false;
                    vidro = false;
                    papel = false;
                    metal = false;
                    plastico = false;

                }else
                {
                    lixo = false;
                    organico = false;
                    vidro = false;
                    papel = false;
                    metal = false;
                    plastico = false;
                }

            }
        }

        if (collision2D.gameObject.CompareTag("lixo-papel"))
        {
            if (lixo)
            {

                if (papel)
                {
                    lixo = false;
                    organico = false;
                    vidro = false;
                    papel = false;
                    metal = false;
                    plastico = false;

                }else
                {
                    lixo = false;
                    organico = false;
                    vidro = false;
                    papel = false;
                    metal = false;
                    plastico = false;
                }

            }
        }

        if (collision2D.gameObject.CompareTag("lixo-metal"))
        {
            if (lixo)
            {


                if (metal)
                {

                    lixo = false;
                    organico = false;
                    vidro = false;
                    papel = false;
                    metal = false;
                    plastico = false;

                }else
                {
                    lixo = false;
                    organico = false;
                    vidro = false;
                    papel = false;
                    metal = false;
                    plastico = false;
                }

            }
        }
    }

    /////////////////////    /////////////////////    /////////////////////    /////////////////////    /////////////////////    ///////

                                                                     //     LIXO       \\



    private void OnTriggerEnter2D(Collider2D collision2D)
    {

        if (collision2D.gameObject.CompareTag("organico"))
        {
            if (!lixo)
            {

                lixo = true;
                organico = true;
                Destroy(collision2D.gameObject);
            }


        }

        if (collision2D.gameObject.CompareTag("plastico"))
        {
                if (!lixo)
                {

                    lixo = true;
                    plastico = true;
                    Destroy(collision2D.gameObject);
                }


            }

        if (collision2D.gameObject.CompareTag("vidro"))
        {
            if (!lixo)
            {

                lixo = true;
                vidro = true;
                Destroy(collision2D.gameObject);
            }

        }

        if (collision2D.gameObject.CompareTag("papel"))
        {

            if (!lixo)
            {

                lixo = true;
                papel = true;
                Destroy(collision2D.gameObject);
            }

        }
        if (collision2D.gameObject.CompareTag("metal"))
        {

            if (!lixo)
            {

                lixo = true;
                metal = true;
                Destroy(collision2D.gameObject);
            }

        }


    }

    /////////////////////  /////////////////////  /////////////////////  /////////////////////  /////////////////////  ///////////////////// 


} // class




Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 2 mensagens ] 

Todos os horários são GMT - 3 horas


Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante


Enviar mensagens: Proibido
Responder mensagens: Proibido
Editar mensagens: Proibido
Excluir mensagens: Proibido
Enviar anexos: Proibido

Ir para:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por: Suporte phpBB