tank drop
jogue a versao atual ! tankdrop-20090929

link que salvou a noite :)
unity3d.com/support/documentation/ScriptReference/index.html

Varias novidades exploradas nesta versao

  • disparo de tiro
  • criacao de cena de menu princial
  • carga de objeto no formato 3ds
  • camera de ladinho
  • Uso de fontes TTF

vamos falar primeiro do disparo do tiro. A ideia inicial era de calcular para que direçao o tanque esta apontando e criar um novo objeto com um rigid body e em alta velocidade na mesma direcao do tanque. Era uma boa intencao mas as contas de determinar para que direcao ficaram um pouco chatinhas, dai tive a ideia de criar um subobjeto do tanque, que eh um quadradinho na posicao onde quero que saia o tiro e adicionei um script a este cubinho, algo assim

var speed = 150.0;

function FireRocket () {
	var bullet = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        bullet.AddComponent(Rigidbody);
	bullet.transform.position = transform.position;
	bullet.transform.rotation= transform.rotation;
	//bullet.transform.localScale= transform.localScale;
    bullet.rigidbody.velocity = transform.forward * speed * -1;
	bullet.rigidbody.mass = 3;
}

function Update () {
    if (Input.GetButtonDown("Fire1")) {
        FireRocket();
    }
}

um detalhe importante que demorei para acertar eh a rotacao do quadradinho de origem do tiro, acabei verificando que rotacionando Y em 270 fica na posicao certa do tiro. e Se for necessario redimensionar o projetil para o tamanho do quadrado por exemplo, basta descomentar o trecho “bullet.transform.localScale= transform.localScale;” que vai reproduzir a mesma escala aplicada ao quadrado para o projetil.

a massa do projetil eh interessante se vc deseja que o tiro vah arrastando coisas com controle fisico pelo caminho, faltou adicionar um som e umas particulas de fumaca na hora do tiro mas jah jah coloco isto :)

A novela do menu principal
para mim o mais dificil foi alinhar a camera com o cubo que resolvi colocar como fundo da tela principal, mas depois me manquei que bastava colocar todo mundo na origem, cubo e camera, e depois ir afastando a camera aos pouquinhos. Nem sei ainda se esta eh a melhor maneira, mas funcionou :)

O efeito de fazer o texto cair, fiz com a criacao de duas caixas, sendo a de cima com rigidbody e suspensa no ar, logo quando inicia a cena a caixa cai, criei um GUI Text como subobjeto da caixa que cai e pronto o texto cai acompanhando a caixa, e para que as caixas em questao nao tivessem nenhum tipo de rederizacao removi o componente Mesh Renderer de cada um.

e para realizar a transicao para a proxima cena, usei o seguinte script que anexei no GuiText “Play”

function Update () {
    if (Input.GetButtonDown("Fire1")) {
		Application.LoadLevel (1);
	}
}

Observe que o numero do level fica determinado na tela de configuracao do build “File / Build Settings”, e lembre-se de nunca ficar mexendo as cenas pelos diretorios :) fiz isto e deu uma baguncada boa nos build settings hehehe.

carga de objeto no formato 3ds
Foi muito sem graça hehehe baixei o arquivo do www.turbosquid.com/ (fica atento que se na hora da busca ordenar pelo menor preco tem varios modelos de graça) descompactei e arrastei sobre o projeto, e arrastei sobre a cena, mudei a escala e pronto todos felizes com o RV2 tank como subobjeto do meu “char”

camera de ladinho
A camera smooth follow nao servia para o que eu queria, o que eu precisava eh uma camera que acompanhasse o tanque mas q quando ele rodasse nao rodasse junto, ou seja uma smotth follow sem rotation :) dei uma canibalizada na smotth follow e sobrou isto aqui

var target : Transform;
var distance = 10.0;
var height = 5.0;

// Place the script in the Camera-Control group in the component menu
@script AddComponentMenu("Camera-Control/Smooth Follow - no rotation")

function LateUpdate () {
	if (!target)	return;

	wantedHeight = target.position.y + height;
	currentHeight = transform.position.y;
	currentHeight = Mathf.Lerp (currentHeight, wantedHeight, Time.deltaTime);

	transform.position = target.position;
	transform.position -= Vector3.forward * distance;

	transform.position.y = currentHeight;
	transform.LookAt (target);
}

O Legal das fontes eh lembrar de criar um objeto de fonte para cada tamanho que sera usado, tirando este detalhe eh bem transparente o uso facim facim, arrasta o arquivo da fonte para o projeto e pimba troca o tamanho e da apply que o unity gera a imagem da fonte no tamanho que eh necessario.