Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Codigo C#

É possível usar algum código para fazer o objeto do script aumentar sua escala constantemente? Vi que é possível utilizar "transform.Translate" e "transform.Rotate", porém não conseguir utilizar para variar a escala.

5 respostas

Oi, Bruno, tudo bem?

Você pode usar o transform.localScale que é o valor que você vê no Inspector. Como você deve imaginar ela recebe um Vector3 então você pode variar o Vector3 como quiser.

index = 0;
void Update ()
{
    index++;
    transform.localScale = new Vector3(index, index, index);
}

Se você quiser dar uma olhada o Vector3 tem uma função chamada MoveTowards onde você pode passar um começo, um fim e de quanto em quanto quer andar de um pra outro.

Vector3 tamanhoDesejado = new Vector3(5, 5, 5);
void Update()
{
    float velocidade = 5 * Time.deltaTime;

    transform.localScale = Vector3.MoveTowards(transform.localScale, tamanhoDesejado,  velocidade);
}

Olá Henrique, beleza?

Interessante o código que você passou!

Tem como fazer o objeto crescer até a escala desejada e, após fazer o objeto diminuir até o tamanho normal?

Consegui fazer isto inserindo a opção "if" com acionamento de controle de entrada "input.getkey". Porém não foi possível fazer isto de forma automática (sem acionamento de teclado).

Tipo ficar indo e voltando o tempo todo ou só uma vez?

Dá pra fazer uma condição que muda o valor do tamanho desejado, agora se você quer o tempo todo eu recomendaria fazer algo calcular um valor que vai mudando de acordo como uma senoide e colocar esse valor no tamanho desejado.

Posso te ajudar se você tiver dúvida :)

Tem como você passar os dois códigos?

1° com o objeto crescendo e diminuindo só uma vez. E,

2° com o objeto indo e voltando o tempo todo.

Agradeço muito se você puder descrever o mencionado na sua resposta sobre calculo e senoide.

Valeu! Bruno

Oi, Bruno,

a formula da senoide seria algo como:

float senoide = tamanho * Mathf.Sin( ( Time.time * velocidade ) + frequencia );

Claro que você tem que declarar as variáveis tamanho que é o tamanho da curva, até onde ela vai; velocidade, que é quão rápido ela vai; e frequencia que é parecido com a velocidade mas vai indicar quantas ocorrências terá num intervalo finito de tempo.

Claro que se você colocar só o Mathf.sin(Time.time) será só uma curva que anda de -1 até 1 então teria que alterar o tamanho, e o resto não seria necessário, por exemplo.

Aí o de ir e voltar uma vez vou deixar pra você brincar com um Booleano por aí, lembrando que a Unity também tem a função PingPong que poderia ser usada pra isso (o exemplo da documentação já te ajuda) porque é um valor que vai e volta também. Também podemos usar o Vector.Lerp e mudar o t da função de 0 até 1 o tempo todo.

Lembrando que você não precisa fazer isso via código você pode selecionar o objetor e abrir o painel de Animation e fazer uma animação da escala do objeto e mandar ela se repetir, isso é muito mais fácil e poupa o trabalho.