iniciante em programação C, ajuda com lógica
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
Curtidas 2
Respostas
Jonas Ferraz
10/04/2020
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!
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!
GOSTEI 0