iniciante em programação C, ajuda com lógica

10/04/2020

0

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bolinha : MonoBehaviour
{

    private Rigidbody rig; /*RigidBody is a unity component that alows gameObjects to react a real time phisics. */
    public float velocidade; /* This atribute will be set up inside the unity */
    public float forcaPulo;
    public bool estChao = false;

    // Start is called before the first frame update
    void Start()
    {
        rig = GetComponent<Rigidbody>(); /* this line i get the atribute from beginning and start to work with it from the update*/
    }               

    // Update is called once per frame
    void Update()
    {

        if (Input.GetKey(KeyCode.LeftArrow))
        {
            if (estChao)
            {
                rig.velocity = Vector3.left * velocidade * Time.deltaTime;
            }
        }
        else if (Input.GetKey(KeyCode.RightArrow)) {
            if (estChao)
            {
                rig.velocity = Vector3.right * velocidade * Time.deltaTime;
            }
            }

         if (Input.GetKeyDown(KeyCode.Space)){
            if (estChao)       /*Por que só funciona com assim ?*/ 
            {
                rig.AddForce(Vector3.up * forcaPulo, ForceMode.Impulse);
                estChao = false;
            }
        }
    }


    private void OnCollisionEnter(Collision colisor)
    {
        if (colisor.gameObject.layer == 9)
        {
            estChao = true;
        }
    }
} 



Eu gostaria de entender o seguinte.. Se eu setei fora da classe a variavel booleana como false e eu deixar dentro de um if como if (estChao)
{}
sem dizer dentro do if se é true ou false, ele entenderá como, que ele esta com o mesmo valor fora da classe ? pq se eu deixar dentro do if como true ou false, ele n executa mais... To estudando design de games, e meio q a mecanica n funciona se eu mudar o valor dentro do if
Weslley Felix

Weslley Felix

Responder

Posts

29/06/2020

Jonas Ferraz

A variável booleana estChao está sendo declarada dentro da classe com o valor false. Ou seja, todas as vezes que a classe for instanciada (criada: Bolinha b = new Bolinha()), o valor de estChao nessa nova instância será false. Até que ele seja alterado.

Nesse caso, há duas linhas atribuindo valores a estChao: a linha 41 e a linha 51. Então esse if receberá o valor que a variável tiver naquele momento.

O motivo do if é esse mesmo: como o próprio nome diz, ela é uma variável, então seu valor vai mudar durante a execução do código. É por isso que o if está aí: o que estiver dentro dele só vai ser executado SE (ou IF) o valor de estChao for true (verdadeiro). Se você mudar o que estiver dentro do if para true ou false estará quebrando essa verificação, e é por isso que o jogo deixa de funcionar.


Espero ter ajudado!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar