Show de biblioteca de explosoes para unity3D !!
Posts Tagged ‘unity3d’
detonator – unity3D
October 9th, 2009unity3d passo 6 – tudo junto num jogo
September 30th, 2009
Esta eh uma versao mais arrumada destas minhas investigacoes do Unity3D.
Alguns comentarios sobre o codigo abaixo que eh novinho em folha.
static var dead:int = 0;
function Awake () {
dead = 0;
}
function OnCollisionEnter(collision : Collision) {
if( collision.collider.name == "bottom" || collision.collider.tag == "enemy"){
dead = 1;
var message = GameObject.Find("end of level");
var message2 = GameObject.Find("end of level2");
message.guiText.text = "You failed.";
message2.guiText.text = "Click to restart";
audio.Play();
}
}
function Update () {
if( dead == 1 ){
if (Input.GetButtonDown("Fire1")) {
Application.LoadLevel (Application.loadedLevel);
}
}
}
Este codigo esta associado ao personagem que esta em movimento, ou seja se o danado colidir com o plano chamado “bottom” que esta abaixo das plataformas, ou com algum dos inimigos a variavel dead eh setada para 1, algumas mensagens sao exibidas e o som correspondente toca.
Quando estiver neste estado de “morto” (dead==1) o update deste mesmo script vai verificar se o click foi pressionado para ai entao recarregar a cena atual, detalhe que a funcao Awake garante que nao reiniciamos a cena com o personagem morto
porque a variavel eh static e portanto o reload da cena nao apaga seu valor.
usei esta variavel em outros pontos do de outros scripts, como por exemplo para impedir que o tiro fosse disparado ou o personagem movimentado se estivesse no estado de morto, veja como foi usado
var speed:int = 10.0;
function FireRocket () {
// dont fire if the char is dead
if (restart_if_char_die.dead == 1) return;
if( count_enemies.end_level == 1) return;
var bullet = GameObject.CreatePrimitive(PrimitiveType.Sphere);
bullet.tag = "bullet";
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 = 5;
audio.Play();
}
function Update () {
if (Input.GetButtonDown("Fire1")) {
FireRocket();
}
}
bom eh isto ae divirta-se jogando as caixinhas do alto, pena que elas nao gritam
unity3d passo 5 – quero te falar …
September 30th, 2009Alem das coisas em 3D que giram explodem e coisa e tal precisamos de textos 2D pendurados em alguns lugares da tela, para isto adicionamos um GUIText, e o legal do GUIText eh o seu posicionamento na tela, que eh bem simples usando somente as coordenadas X e Y (2D pelamordeDEus) no intervalo de 0 a 1.
canto superior esquerdo : X=0 e Y=1
canto superior direito : X=0.9 e Y=1
canto inferior esquerdo : X=0 e Y=0.1
canto inferior direito : X=0.9 e Y=0.1
bons texto pra vc
unity3d passo 4 – quando as coisas se encontram
September 30th, 2009Nada como controlar colisao para fazer as coisas acontecerem em um jogo, algumas referencias sao base para isto :
ScriptReference/Collision.html
a funcao OnCollisionEnter e os detalhes do objeto de colisao o Collider
para testar quero remover o cubo do jogo se ele colidir com o personagem, considerando que o nome do personagem eh char teriamos algo assim :
function OnCollisionEnter(collision : Collision) {
if( collision.collider.name == "char" ){
Destroy( gameObject );
}
}
E este script deve ser adicionado ao prefab que dara origem a todos os cubos assim nao temos de recriar ou reassociar script a cada um dos elementos da tela.
Contagem de inimigos
Outra funcao importante eh contar itens na tela no caso quero contar quantos inimigos ainda estao na cena, o codigo usa o metodo Find da class GameObject e o metodo de FindGameObjectsWithTag ,
[/code]
function Update () {
var enemies = GameObject.FindGameObjectsWithTag ("enemy");
var counter = GameObject.Find("enemies counter");
counter.guiText.text = "enemies found : " + enemies.length;
}
[/code ]
Note que o "enemies counter" eh um GUIText que esta sendo usado para indicar quantos inimigos estao ativos na cena.
unity3d passo 3 – tiros e mais tiros !
September 30th, 2009
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.
unity3d passo 2
September 25th, 2009Mais coisas interessantes no Unity3D, algumas teclas de atalho interessantes : a sequencia QWER muda a forma de manipulacao dos objetos, e de acordo com a forma que estiver selecionada, quando vc clica no fundo muda a forma como arrastar o mouse sobre a tela vai mudar a sua visualização da scene enquanto estiver trabalhando. isto me deu uma dor de cabeça de primeira heheheh como me achar com os oibjetos 3D
outra coisa nova descoberta, como debugar ! basta usar o objeto Debug
facil facil.
Fiz um script para um elevador, funcionou como esperado veja soh como ficou o codigo :
// smaller value
var start:float;
//greater value
var end:float;
var speed: int = 15;
var direction: int = 1;
var sleep:float = 4000;
var elapsed:float = 0;
function Update () {
var y = speed * Time.deltaTime * direction;
// check if the limit is reach and inverse the direction
if( elapsed <= 0 ){
if( direction == 1 ){
if( transform.position.y + y > end ){
transform.position.y = end;
elapsed = sleep;
direction = -1;
}else {
transform.Translate(0 , y, 0 );
}
} else {
if( transform.position.y + y < start ){
transform.position.y = start;
elapsed = sleep;
direction = 1;
}else {
transform.Translate(0 , y, 0 );
}
}
} else {
elapsed = elapsed - Time.deltaTime;
}
Debug.Log(elapsed);
}
Este codigo eh arrastado sobre um gameObject que no caso eh um plano, e determino o Y inicial do objeto e o Y final, o tempo que o elevador fica parado em sleep, e a velocidade que vai se deslocar. fica assim na interface :

Outro aprendizado importante foi como criar materiais, usa Asset / Create / Material e pronto ! dai vc configura os detalhes do material e aplica o material sobre o objeto desejado.
o controle do personagem ainda esta engraçado heheheh tipo quando cai e vira de cabeça para baixo inverte tudo
ainda estou pensando no que fazer, estou com as seguintes opções em mente :
- Nao deixar o personagem virar
- Controlar se ele virou e inverter a transformacao para refletir que esta virado
- Mudar a forma de controlar para ficar parecido com um carro, usando as setas para controlar o volante, e acelerando com seta para cima
unity3d passo 1
September 22nd, 2009
Esta eh a primeira aventura com o Unity3D, graças a um esperto tutorial do Erick consegui dar os primeiros passos no Unity3D !! o resultado pode ser encontrado aqui : move-box1
Quero registrar alguns passos importantes que aprendi :
1. O chao vira chao quando vc chama ele de chao
hehehehe neste exemplo adicionei um cubo usando a opcao : ‘Game Object / Create Other / Cube’, fiz ele ficar mais larguinho para dar mais estabilidade ao movimento e adicionei o component de corpo rigido atraves de : ‘Component / Physics / Rigid Body’ pronto isto bastaria para todos serem felizes e o cubo nao passar do chao quando dah o play.
2. nao entendi ainda como usar um Shader para cada elemento heheheh quando mudo a cor do plano muda a cor da rampinha que fiz
3. adicionei um codigo javascript e arrastei sobre o cubo, pronto !! o metodo update implementado fica valendo para o objeto, e uma variavel que declarei no codigo : var speed:int ficou on inspector do objeto, simplim simplim
olha o codigo usado para o controle de teclado:
var speed: int;
function Update () {
var x = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
var y = 0;
var z = Input.GetAxis("Vertical") * speed * Time.deltaTime;
transform.Translate(x , y, z );
}
4. e este links salvaram o dia
documentacao sobre o gameplay
documentacao sobre a fisica
documentacao sobre o input
post sobre movimentacao com teclas
por enquanto eh soh, depois tem mais
