REFERENCE: Rigidbody


OBJETO

O prefixo (ponteiro, objeto-referencia) para os elementos da Classe (em JavaSript) será:

rigid

PROPRIEDADES

velocity                                             Dada em Vector3

drag                                                 Diminui os efeitos físicos. Valor maior é mais redutor.

mass                                                 Use valores de 0.1 a 10.

useGravity                                           Recebe booleano, ligando/desligando gravidade.

isKinematic                                          Se "true", desliga efeitos físicos.

freezeRotation                                       Se "true", desliga efeito físico que gere rotação.

centerOfMass                                         Ponto em coordenadas locais

worldCenterOfMass                                    Ponto em coordenadas globais

detectCollisions                                     Recebe booleano


MÉTODOS

AddForce(direção*intensidade)                         Uma intensidade razoável para mover 
                                                      um pouco um cubo 2x2x2 é: 100.
                                                      Achar valor adequado por esperimentos. 

                                                      Para objeto sem gravidade, movimento continua.

AddTorque(eixo*intensidade)                           Força que faz o objeto girar
                                                      Eixo é Vector3.  

AddForceAtPosition(direção*intensidade,posição) 


AddExplosionForce(intensidade,posição,raio)           Objetos dentro do raio
                                                      receberão uma força que simula a de explosão. 
                                                      Ver links e demo.

MovePosition(posição)                                 Move até a posição. Mesmo para kinematics.

MoveRotation                                           Move de um ângulo
                                                       Para girar 100 graus:
                                                       var eulerAngleVelocity: Vector3 = Vector3(0,100,0);
                                                       function FixedUpdate(){
                                                        var deltaRotation:Quaternion =
                                                          Quaternion.Euler(eulerAngleVelocity*Time.deltaTime);
                                                         rigidbody.MoveRotation(rigidbody.rotation*deltaRotation);
                                                        }
                    

LINKS PARA EXEMPLOS NOS CURSOS

Na maioria das vezes, adicionamos um Rigidbody a um gameobject usando o Editor.

Usamos isKinematic para definir objetos não-empurráveis

nessa lição
.

Nela mesma usamos também velocity.

Usamos AddExplosionForce para provocar efeitos do projétil da bazuca

nessa lição
.


COMENTÁRIOS ADICIONAIS

Na nossa demo, criamos um "canhão voador". Depois do avatar entrar nele (até não precisa), mover com as teclas: "i","j","k","l","m","n". Liberar o avatar com: "f". Para atirar: "t". Tente derrubar os postes azuis.

Na boca do canhão, colocamos um gameobject vazio para definir o local de instancialização da bala (que tem o nome "bala") e sua direção. Nesse gameobject acoplamos o script:

 
var bala: GameObject; //Arrastar prefab no Inspector
 
function Atirar () {
  var balaClone  = Instantiate(bala, transform.position,transform.rotation);
  balaClone.rigidbody.AddForce (gameObject.transform.TransformDirection (Vector3.forward)*700);
  balaClone.rigidbody.useGravity = true;
}

function Update () {
    if (Input.GetKeyUp("t")) Atirar();
}

Criamos outro gameobject vazio para ser o "terreno-fake", pois ele deve ter Collider, equivalente ao do terreno verdadeiro, com "isTrigger" setado (ver Reference sobre Collider). Nele, acoplamos o script:

var explosao : Transform; //Arrastar prefab no Inspector
public var radius  = 10.0;
public var  power  = 5.0;
  
function OnTriggerEnter(other: Collider){
 if(other.gameObject.name=="bala(Clone)")
    Instantiate(explosao,other.gameObject.transform.position,Quaternion.identity); 
    //Quaternion.identity para rotação corrente.
  var colliders: Collider[] = Physics.OverlapSphere (other.gameObject.transform.position, radius );
  for (var hitx: Collider in colliders) 
     if(hitx.rigidbody) hitx.rigidbody.AddExplosionForce(power, other.gameObject.transform.position, radius, 3.0);
  if(other.gameObject.name=="bala(Clone)") Destroy(other.gameObject);
}
  

Na demo, pode se usar "fullscreen":




TERMINANDO NOSSO CURSO

Com essa lição, terminamos nosso curso.

Claro que tem muita coisa mais para ser aprendida. E, se você é um profissional que comprou a versão PRO do Unity, existem muito mais recursos para serem usados.

Um game feito pelo Unity pode ter "persistência". Podemos registrar usuários e ter seus scores; salvar um jogo para se voltar depois a êle etc. Para isso se acessa um banco de dados num servidor, onde haverá um script para administrar tudo isso. Esse assunto foge ao nível de nosso curso.

Esperamos que vocês tenham gostado das nossas aulas e aprendido coisas que os farão criar games mais divertidos.

Obrigado,

Américo Damasceno Júnior (maio de 2011)


LIÇÃO ANTERIOR
ÍNDICE HOME PAGE