Posts tagged with: Tutorial

Unite – Vídeos gravados durante os eventos da Unity

Eventos são sempre bons lugares para obter informação e experiências sobre algo,  a Unity3D faz isso muito bem promovendo a UNITE.

UNITE é um evento itinerante que promove palestras sobre Unity3D, desenvolvimento de jogos, cases, enfim todos os assuntos que são relacionados nessa área, acontece em todo o mundo, até no Brasil já teve e para nossa alegria eles filmam todos os eventos e colocam no site, falae, são gente boa né.

A maioria dos vídeos são em inglês.

Clique na imagem acima ou no LINK AQUI para acessar a página principal dos vídeos da UNITE.

Share

Garbage Collector – Gambiarra para forçar a passagem – AS3

Acho que todo mundo que programa em action script 3 sabe como é chato o lance de Garbage Collector, ele passa quando quer e olhe lá.
Você pode remover os Listeners, remover o child mas mesmo assim o objeto fica na memória, se der um trace dentro do movieclip ele ainda aparece, mas temos uma gambiarra que pode ajudar a remover esses lixos da memória, basta utilizar o código abaixo:

try {
new LocalConnection().connect('foo');
new LocalConnection().connect('foo');
} catch (e:*) {}

O que ele faz é tentar um localConnection 2 vezes seguidas, como irá falhar nas 2 vezes, na segunda vez ele chama o garbage collector, não me pergunte porque isso funciona, mas funciona.
Esse código não causa erro nem nada e é muito útil.

Abaixo um exemplo disso:

O código usado foi o seguinte:

import flash.events.Event;
import flash.display.MovieClip;

criarBTN.addEventListener(MouseEvent.CLICK , onCriar);
removerBTN.addEventListener(MouseEvent.CLICK , onRemover);
gambiarraBTN.addEventListener(MouseEvent.CLICK , onGambiarra);

function onCriar(event:Event):void
{
       //cria um moviclip de estrela e passa o campo de saida como argumento apenas para dar saída no texto
	var temp:EstrelaMC = new EstrelaMC();
	temp.saida = saidaTXT;
	areaMC.addChild(temp);
	temp.x = Math.random() * 350;
	temp.y = Math.random() * 100;
	temp = null;
}
function onRemover(event:Event):void
{
        //Remove todas as estrelas
	while (areaMC.numChildren > 0)
	{
		areaMC.removeChildAt(0);
	}
	saidaTXT.text = "Limpando os movieclips \n";
}
function onGambiarra(event:Event):void
{
        //Chama a gambiarra para limpar a memória
	saidaTXT.text = "Gambiarra Executada - Memória Limpa\n";
	try
	{
		new LocalConnection().connect('foo');
		new LocalConnection().connect('foo');
	}
	catch (e: * )
	{
	}
}

Como mostrado, mesmo retirando as estrelas, os movieclips ainda continuam na memória, executando as instruções.
É isso ae, até a próxima, espero que não demore mais um ano.

Share

Minha estrutura de projeto básica para sites e apps em flash

Sempre que começo um projeto em flash, uso sempre o mesmo conjunto de arquivos padrão, que engloba a estrutura de pastas e arquivos do loading, já que isso tem em todos os projetos em flash.

Não sei se essa é a maneira mais correta de se fazer, mas para mim está dando certo.

Uso seguinte estrutura de pastas:

src- onde guardo os arquivos *.as

deploy- onde é gerado os arquivos *.swf, *.html e onde ficam todas as imagens que serão lidas, arquivos de scripts *.php etc…

O objetivo dessa pasta é separar os arquivos fonte os arquivos compilados, isso facilita na hora de fazer o upload, bastando selecionar todos os arquivos que estão dentro dela e enviar.

fla- onde guardo os arquivos *.fla

Como utilizo a IDE eclipse para programar no flash, o eclipse cria algumas pastas e arquivos de ajuda .

Na pasta fla contém um arquivo chamado Main.fla, que tem um movieclip chamado carregador, com uma animação de 100 frames para ser tocada de acordo com a porcentagem de carregamento, quando termina de carregar esse movieclip some usando a biblioteca TweenLite.

Lembrando que todos os movieclips que usarem LINKAGE devem ser colocados no frame 2 e desabilitado a opção de “Export in frame 1″, para entrarem na contagem do loading.

Estou colocando para download o projeto básico e as actions de loading e lógica de reposicionamento quando se altera o tamanho do stage.

Downloads

Projeto Básico

TweenLite

Share

Editar animação importada no Unity3D

Quando o Unity3D importa um arquivo que contêm animação, ele blinda esse arquivo e não permite que a animação seja editada usando o animation view.

Mas como tudo se dá um jeito, segue uma dica para contornar esse problema: duplique a animação, assim ela perde o link com o objeto e passa a ser editável.

Segue um passo-a-passo para isso:

1 - Localize o item de animação do arquivo importado.

2 - Vá em Edit / Duplicate ou simplesmente Ctrl+D.

3 - Renomeie o arquivo duplicado para ficar mais bonito.

4 - Selecione o arquivo que está na cena (se não estiver, coloque).

5- Vá até a aba inspector e localize a área Animation.

6- Troque o clip que está na variável Animation, selecionando a animação que foi duplicada.

7- Com o objeto selecionado na cena, abra a Animation view e troque a animação corrente que é apenas de leitura para a editável.

Pronto, você já pode editar tudo que quiser na animação.

Repare na imagem acima, o bloqueado deixa os nomes em cinza e travado e o que liberamos fica em branco.

Então é isso , até a próxima.

Share

PDA – Abrir 2 projetos do Unity3d ao mesmo tempo

Por Ezequiel Santana Junior

Um dos problemas do Unity3D é que por padrão podemos abrir apenas uma instância por vez, mas abrir um segundo projeto para poder olhar alguma coisa é muito útil.
Existe uma gambiarra para abrir mais instâncias as mesmo tempo, segue o passo-a-passo:

1- Abra o bloco de notas e escreva

“caminho do Editor do Unity3D” -projectPath “caminho da pasta do seu projeto”

No meu caso fica assim:

“C:\Program Files (x86)\Unity\Editor\Unity.exe” -projectPath “F:\trabalhos\furadeira\APP”

2- Clique em Arquivo/ Salvar como…

3- Coloque um nome para o arquivo com a extensão “.bat”, não esquecendo de selecionar “Todos os arquivos (*.*)”  do combobox Tipo: , senão ele salva como txt.

4- Clique em Salvar.

Depois disso é só abrir o Unity3D normalmente para o primeiro projeto e para o segundo execute o arquivo que acabamos de criar, irá abrir a segunda instância.

Ezequiel Santana Junior: Progamador de diversas linguagens entre elas Delphi e JavaScript, apaixonado por criar jogos e sempre que tem tempo livre joga Call of Duty no Garena.

Share

Unity 3D – Trocar logo do loading no webplayer

Essa semana um leitor do blog chamado Eskiel me perguntou se eu sabia como trocar o logo do loading no webplayer, eu não sabia, mas fiquei curioso e fui pesquisar, fiz alguns testes e estou colocando aqui o resultado.

Exemplo:

CLIQUE AQUI para ver funcionando.

Para fazer isso basta adicionar algumas linhas no html e alterar a linha que fala qual o arquivo *.unity3d será anexado no html, mas isso só é possível com o Unity 3D PRO.

var params = {
backgroundcolor: "A0A0A0",
bordercolor: "000000",
textcolor: "FFFFFF",
logoimage: "logotipo.png",
progressbarimage: "barraLoading.png",
progressframeimage: "fundoLoading.png"
};

unityObject.embedUnity("unityPlayer", "WebPlayer.unity3d", 600, 450 , params);

Uma breve descrição dos parâmetros:

backgroundcolor:  A cor de fundo da região do webplayer durante o carregamento, o padrão é o branco.

bordercolor:  A cor da borda de um pixel desenhado em torno da região do webplayer durante o carregamento, o padrão é o branco.

textcolor:  A cor do texto da mensagem de erro (quando o arquivo de dados não carregar, por exemplo). O padrão é preto ou branco, dependendo da cor de fundo.

logoimage:  O caminho para uma imagem de logotipo personalizado, a imagem do logotipo é desenhado centralizado na região do webplayer durante o carregamento.

progressbarimage:  O caminho para uma imagem personalizada usada como barra de progresso durante o carregamento. Largura da imagem da barra de progresso é cortado com base na quantidade de carga de arquivo completo, portanto, começa com uma largura em pixels zero e anima a sua largura original quando a carga está completa. A barra de progresso é desenhada sob a imagem do logotipo.

progressframeimage:  O caminho para uma imagem personalizada usado como fundo para a barra de progresso durante o carregamento.

DOWNLOADS:
Código Fonte – Download

Share

Unity 3D – Dica para criação de scripts c#

Quando estou programando no Unity 3D minha linguagem de script preferida é C#, utilizo o Microsoft Visual Studio Express (de graça AQUI) para me ajudar.

Mas sempre que crio um script no Unity 3D tenho que renomear o arquivo e também trocar o nome dentro do script e isso é bem chato.

Mas com o Visual Studio a coisa fica mais fácil, criaremos os scripts diretamente por ele, utilizando um template customizado para criação de um novo script.

Siga o passo-a-passo:

1 – Baixe o template customizado

DOWNLOAD

2 – Coloque o arquivo zipado mesmo na pasta …\Documents\Visual Studio 2008\Templates\ItemTemplates e abra o Visual Studio

3 – Na aba Solution Explorer, clique com o botão direito na pasta onde será criado o novo script e vá em Add – New Item…

4 – Coloque o nome para o novo script e desça a barra de rolagem até achar o icone do MonoBehavior ( se não estiver na lista, alguma coisa foi feita errada nos primeiros passos), selecione o item e clique em Add.

Pronto, um novo arquivo de script será criado, com todos os nomes certos.

Você pode abrir o arquivo zip e alterar o .cs que tem lá dentro com as coisas que você mais usa, para que sempre que criar um arquivo de script novo já venha tudo pronto.

Share

Tutorial Flash – Arrastando MovieClips – AS3

Hoje vou mostrar quatro modos de arrastar objetos no flash, mais conhecido como “DRAG”.
Drag é quando você clica sobre o objeto, segura o botão apertado e move o mouse, o objeto segue seu movimento, soltando o botão o objeto deixa de seguir.
O objeto pode seguir a partir do ponto que foi clicado ou do ponto (0,0) de si mesmo.

Primeiro modo de DRAG – (BOLA AMARELA)
startDrag() e stopDrag() a partir do ponto clicado;

Esse é o modo mais fácil de fazer, primeiro se adiciona um ouvinte para o evento MOUSE_DOWN que é quando você está com o mouse sobre o objeto e pressiona o botão esquerdo do mouse, depois adiciona outro ouvinte para o evento MOUSE_UP que captura quando você solta o botão esquerdo do mouse sobre o objeto.
O evento MOUSE_UP foi colocado no stage pois dependendo do tipo de drag o mouse nem sempre estará sobre o objeto quando o botão esquerdo for solto.
Esses dois eventos chamam a função controleBola que verifica o event.type, verifica se foi o MOUSE_DOWN ou MOUSE_UP que foi executado, claro que poderia ter sido feito de outra forma, como por exemplo duas funções diferentes, uma para cada tipo de evento , mas assim o código fica mais curto.
Se o evento foi MOUSE_DOWN usamos o startDrag() que manda o objeto seguir o mouse.
Se o evento foi MOUSE_UP usamos o stopDrag() que manda o objeto parar de seguir o mouse.

bolaMC.addEventListener(MouseEvent.MOUSE_DOWN , controleBola);stage.addEventListener(MouseEvent.MOUSE_UP , controleBola);
function controleBola(event:MouseEvent):void {
	switch (event.type) {
		case "mouseDown" :
			bolaMC.startDrag();
			break;
		case "mouseUp" :
			bolaMC.stopDrag();
			break;
	}
}

Segundo modo de DRAG – (ESTRELA AZUL)
startDrag() e stopDrag() a partir do seu ponto (0,0);

Para fazer isso apenas coloque true no parâmetro lockCenter do startDrag():

bolaMC.startDrag(true);

O objeto se deslocará colocando o seu ponto(0,0) na posição do mouse.

Terceiro modo de DRAG – (QUADRADO VERDE)
Coloca o ponto (0,0) do objeto no valor x e y do mouse, similar ao startDrag(true).

Como no primeiro iniciamos pegando os eventos MOUSE_DOWN e MOUSE_UP do objeto, mas agora iremos também usar o evento ENTER_FRAME para executar a função que moverá o objeto para a posição do mouse.
Primeiro declaramos a variável booleana quadradoDrag que nos dirá se o objeto deverá ou não seguir o mouse.
Na função controleQuadrado dizemos para a variável quadradoDrag que deve seguir quando o evento for MOUSE_DOWN e que não deve quando for o evento MOUSE_UP.
Na função loop que é chamada a cada frame devido ao evento ENTER_FRAME, verificamos se o quadradoDrag está sinalizando para mover e atribuímos o valor x e y do mouse para o valor x e y do objeto respectivamente.

quadradoMC.addEventListener(Event.ENTER_FRAME , loopQuadrado);
quadradoMC.addEventListener(MouseEvent.MOUSE_DOWN , controleQuadrado);
stage.addEventListener(MouseEvent.MOUSE_UP , controleQuadrado);
var quadradoDrag:Boolean = false;
function controleQuadrado(event:MouseEvent):void {
	switch (event.type) {
		case "mouseDown" :
			quadradoDrag = true;
			break;
		case "mouseUp" :
			quadradoDrag = false;
			break;
	}
}
function loopQuadrado(event:Event):void{
	if(quadradoDrag){
		quadradoMC.x = mouseX;
		quadradoMC.y = mouseY;
	}
}

Quarto modo de DRAG – (TRIÂNGULO VERMELHO)
Calculando a posição do mouse e subtraindo a posição de onde foi clicado sobre o objeto, similar ao startDrag().

Funciona da mesma forma que o terceiro tipo, mas agora ao invés de uma variável dizer que deve seguir, usaremos um objeto Pointer, que serve para armazenar dois pontos, x e y, acessível via ponto.x e ponto.y
Iniciamos com a variável offset do tipo Point setada em null, que quer dizer que não tem nada armazenado nela.
Quando a função de controle é chamada pelo evento MOUSE_OVER, pegamos a posição do mouse relativa ao ponto (0,0) do objeto, como mostra a imagem abaixo.

Quando a função de controle é chamada pelo evento MOUSE_UP, setamos null novamente, para offset para zerar o objeto.
E na função de loop verificamos se o offset não é null, se for não fazemos nada, se tiver valores dentro dele, pegamos a posição do mouse e subtraímos a posição do mouse relativa que foi setada no evento MOUSE_OVER e passamos para o objeto.

trianguloMC.addEventListener(Event.ENTER_FRAME , loopTriangulo);
trianguloMC.addEventListener(MouseEvent.MOUSE_DOWN , controleTriangulo);
stage.addEventListener(MouseEvent.MOUSE_UP , controleTriangulo);
var offset:Point = null;
function controleTriangulo(event:MouseEvent):void {
	switch (event.type) {
		case "mouseDown" :
			offset = new Point(event.localX , event.localY);
			break;
		case "mouseUp" :
			offset = null;
			break;
	}
}

function loopTriangulo(event:Event):void{
	if(offset != null){
		trianguloMC.x = mouseX - offset.x;
		trianguloMC.y = mouseY - offset.y;
	}
}

No exemplo coloquei mais um função que faz o objeto clicado ficar sobre os demais, não vou explicar isso, pois não é o foco deste post, mas está aplicado no .fla que está para download abaixo.

DOWNLOAD
startDrag.zip

Share

Código comentado – Inversor de URL

Esses dias um amigo reclamou comigo de que tudo que vai baixar na internet estava com o URL invertido e com sites de celulares para liberar o link, me pediu ajuda para criar uma lógica que desinverta a URL.
Então fiz uma lógica básica que inverte uma string.
Basta colocar a URL que está invertida e clicar em inverter.



O código é simples:

import flash.events.Event;

var url:String;

function inverterFN(event:Event):void
{
	
	var saida:String = "";
	//pega o que foi digitado
	url = entradaTXT.text;
	//caso for um URL que inverte busca o sinal de = 
	//e pega apenas os parametros
	url = url.slice(url.indexOf("url=")+1 , url.length);
	//percorre do fim para o inicio a url e coloca na saida
	for (var i:int = url.length; i > 0; i--){
		//vai somando letra a letra
		saida += (url.slice(i-1,i));
	}
	//mostra a saída
	saidaTXT.text = saida;
	
}

function limparFN(event:Event):void{	
	entradaTXT.text = saidaTXT.text = "";
}

inverterBTN.addEventListener(MouseEvent.CLICK , inverterFN);
limparBTN.addEventListener(MouseEvent.CLICK , limparFN);

Abaixo tem o download do .fla.
DOWNLOAD

Share

Vídeo Aula 1 – Unity 3D – Ferramenta SNAP

Opaa , faz tempinho que não coloco nada aqui, estive ocupado com outras coisas, mas volto estreando no ramo das vídeo aulas, essa é minha primeira e falo sobre a ferramenta snap do Unity 3D 3.0, que facilita a vida e a produtividade na hora de posicionar os objetos na cena, espero que gostem!

Share

Pages:12