
O prefixo (ponteiro, objeto-referencia) para os elementos da Classe (em JavaSript) será:
rigid
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
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);
}
Na maioria das vezes, adicionamos um Rigidbody a um gameobject usando o Editor.
Usamos isKinematic para definir objetos não-empurráveis
Nela mesma usamos também velocity.
Usamos AddExplosionForce para provocar efeitos do projétil da bazuca
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":
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
