Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Problema ao definir variável Velocidade como float

Quando fiz a criação da variável Velocidade como atributo publico da classe, o valor "10" atribuído não estava sendo levado para o Unity.

O código estava assim:

public class ControlaJogador : MonoBehaviour
{

    public float Velocidade = 10;

    // Update is called once per frame
    void Update()
    {
        var eixoX = Input.GetAxis("Horizontal");
        var eixoZ = Input.GetAxis("Vertical");

        var direcao = new Vector3(eixoX, 0, eixoZ);

        transform.Translate(direcao * Velocidade * Time.deltaTime);
    }
}

No Unity, a variável era apresentada no Jogador, mas com valor "0". Somente conseguia me movimentar no jogo após alterar o valor, pois esse zero era passado para o script.

Tentei a atribuição usando "=10.0f", mas o valor inicial também não foi passado para o Unity.

Só consegui fazer alterando a variável para int no "ControleJogador.cs" e me garantindo no cast implícito da operação.

Existe alguma forma correta de atribuir o valor inicial no script para que ele seja levado para o Unity?

5 respostas

Olá Janaína, tudo bem? Faz muito tempo que não mexo com a Unity, mas se não me engano, na sua classe que herda MonoBehaviour, existe tbm o método Start(), para fazer a inicialização de valores no componente.

public class ControlaJogador : MonoBehaviour
{
    public float Velocidade;

    void Start()  { 
            this.Valocidade = 10f; 
    }
    ...
}

Oi, Janaína, tudo bem?

O valor que você colocar ali no inspetor ao colocar o script na personagem tem prioridade, então se lá está zero no começo do jogo o valor atribuido a Velocidade é 0 mesmo que você diga que o valor inicial é 10 no script, aquele valor sempre vai ter prioridade. Então recomendo colocar o 10 lá no Inspector mesmo :)

Esse 10 pra iniciar o script serve mais como parametro pra caso você use esse mesmo script em outro jogo não venha zerado e você ache que é algum problema no código.

Entendo, mas gostaria de levar o valor incializado no Script para o Inspector. No vídeo do professor funcionou perfeitamente. Imagino que eu esteja fazendo alguma coisa de errado, ou que algo mudou com as novas versões do Unity.

solução!

Clica na engrenagem do script no Inspector e remove o componente. Depois arrasta de novo e veja se o valor vem como 10 como você selecionou inicialmente no script ou apresenta outro?

Pode dar o Play pra testar se tá está tudo certo. Qualquer coisa avisa a gente :)

Quanto removo o script e adiciono novamente ou uso a opção reset ele atualiza. O valor incial do parâmetro só não é atualizado no Unity quando o valor de inicialização do script é alterado.

Tive a falsa ilusão de que com int funcionava porque quanto mudei o tipo da variável ele refez o parâmetro e atualizou o valor incial.

Obrigado.