Portuguese Spain English Japanese




25 de abr. de 2011

Tutorial script para movimento aleatório

Pessoal meu primeiro script para Unity e serve para definir uma velocidade aleatória para um objeto. Ajudou muito no meu projeto. Vou ensinar para vocês usarem ai nos seus projetos e adaptá-lo como queiram.

Adicionei comentários para facilitar o entendimento qualquer coisa é só vocês retirarem.


Na janelinha Project clique em Create > Javascrip. Apareceu um novo arquivo na pasta do projeto. Clique uma vez nele, renomeie para o que quiser (eu coloquei moverbola) e pressione Enter. Agora clique duas vez sobre ele, abrirá um editor de scripts. Apague tudo e cole o script abaixo:
//Quando a bola for criada na cena
function Start () {
//a variavel lado vai assumir o valor 1 (direita) ou esquerda
var lado=Mathf.Floor(Random.Range( 1, 3));
//a variavel altura vai assumir o valor 1 (acima) ou para baixo
var altura=Mathf.Floor(Random.Range( 1, 3 ));
//declaramos as variaveis de velocidade nos eixos x e z
var xvelocity=0;
var zvelocity=0;

if (lado==1) //se ele for pra direita
{
xvelocity= Mathf.Floor(Random.Range( 8, 10 )); //sorteia uma velocidade entre 8 e 10
} else //se for pra esquerda
xvelocity= Mathf.Floor(Random.Range( -8, -10 ));//sorteia uma velocidade entre -8 e -10

if (altura==1){//se ele for pra cima
zvelocity= Mathf.Floor(Random.Range( 8, 10 ));//sortei uma velocidade vertiacal entre 8 e 10
} else//se ele for pra baixo
zvelocity= Mathf.Floor(Random.Range( -8, -10 ));//sortei uma velocidade vertiacal entre -8 e -10

rigidbody.velocity=Vector3(xvelocity,0,zvelocity);//define a velocidade do objeto
}

function OnCollisionEnter () { //se ele colidir com algo
if (rigidbody.velocity.z<30 && rigidbody.velocity.z>-30 ) //se a sua velocidade não for superior a 30
rigidbody.velocity*=1.17; // a velocidade aumenta 17%
}//acaba a funão starter

function Update () {//acontece frame por frame
if (rigidbody.velocity.x>30) //se a velocidade em x é maior que 30
rigidbody.velocity.x=30; //ela é igual a 30 (se for muito rapido buga)
else if (rigidbody.velocity.x<-30) //senão, se a velocidade em x é menor que -30 rigidbody.velocity.x=-30; //ela é igual a -30 else if (rigidbody.velocity.x<10 && rigidbody.velocity.x>-10){ //senao, se a velocidade em x está entre 10 e -10
if (rigidbody.velocity.x>0)//verifica se é maior que 0
rigidbody.velocity.x=10;// se sim velocidade de x =10
else//senao
rigidbody.velocity.x=-10;//velocidade de x= -10
}
if (rigidbody.velocity.z>30)//se a velocidade em z é maior que 30
rigidbody.velocity.z=30;//ela é igual a 30 (se for muito rapido buga)
else if (rigidbody.velocity.z<-30)//senão, se a velocidade em x é menor que -30 rigidbody.velocity.z=-30;//ela é igual a -30 else if (rigidbody.velocity.z<3.5 && rigidbody.velocity.z>-3.5){//senao, se a velocidade em x está entre 10 e -10
if (rigidbody.velocity.z>0)//verifica se é maior que 0
rigidbody.velocity.z=3.5;// se sim velocidade de x =10
else//senao
rigidbody.velocity.z=-3.5;//velocidade de x= -10
}
}


Tudo que está dentro da função Update serve para controlar a velocidade da bola para evitar bugs como por exemplo a bola ficar rápida de mais ou zerar em um dos eixos.

Arraste o script para o objeto que deseja que tenha velocidade aleatoria e adeque os números as suas necessidades, é só observar os comentários.

Espero que isto ajude vocês.
Até mais

Um comentário: