Vous êtes sur la page 1sur 19

TPICO: Artigo para iniciantes em JavaScript na Unity Artigo para iniciantes em JavaScript na Unity 23 Ago 2012 20:24 #111480

Ol Pessoal! Bom, frequentemente, via MSN, muitas pessoas me pedem um bom guia para programar na Unity, ento eu decidi traduzir o guia do usurio tonyd, do frum americano da Unity3D. Ento, todos os crditos por esse guia vo para tonyd, eu s estou o traduzindo e fazendo eventuais adaptaes aqui e ali. J entrei em contato com tonyd e ele me concedeu permisso para postar essa traduo. Voc pode encontrar o tpico original clicando aqui! O motivo para eu estar traduzindo esse guia, por que ele me ajudou muito quando eu estava iniciando em programao dentro da Unity, e grande parte da minha limitada habilidade em programao eu devo a esse guia, por que sempre bom ter por onde comear! A partir daqui, fiquem ento com a traduo do guia(ainda em andamento). No se assustem com o tamanho do artigo, eu garanto que vale a pena e espero que a minha traduo tenha ficado compreensvel! Guia para iniciantes em JavaScript na Unity

GutoThomas_

OFFLINE Solid Postagens: 32

Esta minha introduo a scripting com a verso da Unity de Javascript, tambm conhecida como UnityScript. No requer nenhuma experincia com programao. Se voc tiver alguma experincia com programao, voc pode querer pular para a parte de funes e classes. Se voc for um expert, provavelmente vai querer pular esse tpico completamente, por que ir se

sentir ofendido em como eu simplifico alguns conceitos. Se voc quiser executar os cdigos de exemplos, dever estar familiarizado com a interface da Unity e saber como criar um script e anex-lo a um GameObject. Veja os links abaixo: Introduo a Interface da Unity (em Ingls). Introduo a scripting com Unity leia a seo entitulada Our first script, e Attaching the script. [] Textos em vermelho se aplicam apenas para usurio da Unity Mobile(No sei se isso ainda vlido).

VARIVEIS

Pense em uma varivel como sendo um container, que armazena alguma coisa. Voc pode optar por nomear uma varivel do jeito que desejar desde que no contenha espaos, inicie com uma letra (preferencialmente minscula), contenha apenas letras, nmeros ou underlines e no seja uma palavra reservada.
var caixa;

A est! voc declarou sua primeira varivel! Se voc est se perguntando sobre o ponto-e-vrgula no final: declaraes (comandos), em JavaScript, devem ser finalizados com ponto-e-vrgula. Programando para iPhone? Se voc declarar uma varivel sem anexar a ela um valor, voc dever especificar de que tipo essa varivel . Neste caso, uma String. Tipos comuns incluem String, int, float, boolean e Array. Note que necessrio diferenciar letras maisculas de minsculas (string e String so coisas diferentes, devido a essa diferena na capitalizao da primeira letra).
var caixa: String;

Claro que nossa caixa est vazia, ento vamos armazenar algo nela adicionando a seguinte linha:
caixa = abacaxi; // No tpico original ele usa ma, mas por causa da acentuao, usarei abacaxi como exemplo.

Agora, nossa caixa contm uma string de texto (tipo de varivel) que abacaxi. Perceba que voc pode declarar a sua varivel e, no mesmo comando, dar a ela um valor:
var caixa = abacaxi;

Porm, uma vez declarada, voc no pode declarar ela novamente. Voc pode, entretanto, alterar o seu valor. (desde que o novo valor seja do mesmo tipo que o original).
caixa = laranja;

Alm de strings de texto, variveis podem armazenar nmeros:


var numero = 10;

Isso um inteiro(int), o que significa: sem casas decimais. Mas ns poderamos, tambm, criar um nmero de ponto flutuante (float), que pode conter casas decimais.
var meuFloat = 10.5;

Variveis podem ser tambm boleanas. Uma boleana armazena apenas um valor que pode ser verdadeiro ou falso:
var fimDeJogo = true;

Vamos falar sobre elas um pouco mais adiante. Perceba que uma varivel normalmente pode conter apenas uma coisa por vez. Mas ns podemos criar uma varivel que contenha mltiplas coisas por vez, criando um Array:

var tortaDeAbacaxi = Array(abacaxi, aucar mascavo, manteiga, massa de torta);

Essa varivel contm tudo que voc precisa para fazer uma torta de abacaxi! Se ns quisssemos ver o contedo de 'tortaDeAbacaxi', poderamos fazer o 'output' dos valores para o console da Unity usando o comando Debug. Adicione esta linha ao cdigo:
Debug.Log(tortaDeAbacaxi);

Quando o projeto for executado, o console deve exibir: abacaxi, acucar mascavo, manteiga, massa de torta Para acessar um nico elemento no array(vetor), ns podemos faz-lo atravs de seu ndice (posio no vetor). Isso pode parecer confuso, mas ndices comeam em 0. Ento, o ndice 0 , na verdade, o primeiro elemento no vetor.
var tortaDeAbacaxi = Array(abacaxi, acucar mascavo, manteiga, massa de torta); var item1 = tortaDeAbacaxi[0]; Debug.Log(item1);

Voc tambm pode usar ndices em strings. O seguinte cdigo exibe o primeiro caractre de ola, a letra o:
var minhaString = ola; Debug.Log(minhaString[0]);

Agora, vamos alterar nossas variveis de maneira diferente. Ns podemos somar variveis:
var numero1 = 10; var numero2 = 11; var total = numero1 + numero2;

Debug.Log(total);

Se voc adicionar um int(inteiro) a um float(nmero de ponto flutuante), o resultado se torna um float:


var numero1 = 100; var total = numero1 + 1.5; Debug.Log(total);

Obviamente, tambm podemos subtrair, dividir e multiplicar inteiros e floats. Menos bvio, ns tambm podemos somar strings. Isso as junta.
var string1 = cidra de; var string2 = ma; var combo = string1 + string2; Debug.Log(combo);

Se ns somarmos um nmero a uma string, o resultado se torna uma string. Tambm podemos multiplicar strings:
var saudacao = ola; Debug.Log(saudacao * 3);

Infelizmente, ns no podemos dividir ou subtrair strings. Sempre h um modo de separar strings e remover partes delas, mas este um tpico mais avanado. Vamos encerrar nossa discusso sobre variveis com nmeros que so incrementados, ou seja, mudam de valor atravs de uma constante. Primeiramente, declare uma varivel e d a ela o valor de 1:
var numero = 1;

Podemos incrementar valores de vrias maneiras.

numero = numero + 1;

O cdigo acima adiciona 1 para o nosso numero, e ele passa a valer 2. Mas programadores so preguiosos, e decidiram que isso era muito longo. Ento, abreviaram para:
numero += 1;

Isto simplesmente a abreviao para numero = numero + 1; Mas, sabe de uma coisa? Programadores preguiosos decidiram que at mesmo isso era longo, e ento abreviaram para:
numero++;

Use qual faz mais sentido para voc, todos eles fazem a mesma coisa! Mas perceba que se voc quiser incrementar por um valor diferente de 1, ++ no funcionar. ++ a abreviao para += 1 apenas. Voc pode fazer a mesma coisa com subtrao:
numero--;

Mas, para diviso e multiplicao, voc deve usar uma das formas mais longas:
numero = numero/2; numero *= 2;

Perceba que um asterisco significa multiplicao, e uma barra significa diviso. DECLARAES IF

Declaraes if so declaraes condicionais. Se uma condio avaliada como verdadeira, faa alguma coisa. Ns podemos fazer comparaes entre dois valores usando dois sinais de igualdade, ==. numero == 10 avaliado como verdadeiro se nosso numero igual a 10, caso contrrio, avaliado como falso. Nota: importante lembrar-se de usar dois sinais de igualdade quando comparar variveis/valores, e um sinal de igualdade quando atribuir um valor a uma varivel! A seguinte linha cria uma varivel e atribui a ela o valor true, avalia se a varivel igual a true, e se for, exibe um texto no console.
var jogoIniciado = true; if(jogoIniciado == true) Debug.Log(O jogo foi iniciado!);

O cdigo acima de certa forma redundante, uma vez que nossa varivel jogoIniciado uma boleana. No h razo em verificar se verdadeiro igual a verdadeiro, apenas verifique se verdadeiro.
var jogoIniciado = true; if(jogoIniciado) Debug.Log(O jogo foi iniciado!);

Se voc est se perguntando por que eu no coloquei um ponto-e-vrgula depois de if(jogoIniciado), por que, tecnicamente, esta apenas a primeira metade da nossa declarao. Eu poderia ter escrito desta forma:
if(jogoIniciado) Debug.Log(O jogo foi iniciado!);

Eu poderia, tambm, ter escrito desta forma:


if(jogoIniciado) { Debug.Log(O jogo foi iniciado!); }

As chaves representam um bloco de cdigo, e dizem declarao if para executar tudo entre as chaves... Se a condio for verdadeira! Quando if contm apenas uma declarao para ser executada, as chaves so opcionais. Mas, se ele contiver mais do que uma, voc DEVE usar as chaves. Perceba que ponto-e-vrgula no necessrio depois das chaves.
var jogoIniciado = false; if(jogoIniciado == false) { jogoIniciado = true; Debug.Log(Eu acabei de iniciar o jogo!); }

Leia a segunda linha do cdigo acima. Lembra-se daqueles programadores preguiosos? Eles no querem escrever:
if(jogoIniciado == false)

Quando eles podem escrever:


if(not jogoIniciado)

Mas, sabe de uma coisa? Por que escrever not (no), quando voc pode abreviar isto tambm?
if(!jogoIniciado)

Sim, um ponto de exclamao significa no para programadores preguiosos! Voc pode, tambm, combinar isto com uma igualdade, o que significar no igual:
var resposta = 1; if(resposta != 42) Debug.Log(Questo incorreta!);

Voc tambm pode verificar por maior que ou menor que:


var idade = 18; if(idade > 18) Debug.Log(Velho o bastante); else if(age < 18) Debug.Log(Jailbait); // Algo como chave de cadeia, eu creio else Debug.Log(Exatamente 18.);

Percebeu as palavras reservadas else if e else? Se a primeira declarao condicional falhar(avaliada como falsa), ser ento checada a condio do else if. Se essa falhar, ser checado o prximo else if(se houver outro disponvel). E, finalmente, se todas as condies falharem, ser executada a declarao abaixo de else. Novamente, se if, else if, ou else contiverem mais do que uma declarao, cada bloco de cdigo deve ser separado por chaves. Voc tambm pode avaliar mltiplas condies em uma nica declarao:
if(idade >= 18 && sexo == feminino) comprarBebida = true;

Acima, introduzimos maior que ou igual a >= e o operador E, o qual representado por dois caracteres ampersand: &&. Se ambas as condies forem verdadeiras, a declarao ser executada. Se qualquer uma delas for falsa, a declarao no ser executada. Nota: Se voc quiser executar o cdigo acima, lembre-se de criar variveis para idade(int), sexo(String) e comprarBebida(boolean) antes disso.
if(engine == Unity || desenvolvedor == amigo) comprarJogo = true;

Acima, ns usamos o operador OU, o qual representado por duas barras verticais: ||. Se qualquer uma das condies for verdadeira, a declarao ser executada. Se ambas forem falsas, a declarao no ser executada. Nota: Se voc quiser executar o cdigo acima, lembre-se de criar variveis para engine(String), desenvolvedor(String) e comprarJogo(boolean) antes disso. If tambm pode ser usado com a palavra reservada in (em). Isso geralmente usado em Arrays(vetores):
var nomes = Array(max, rick, joe); if(joe in nomes) Debug.Log(Joe foi encontrado!);

Aprenda a programar em C# na Unity3D: http://www.youtube.com.br/user/xxgutoxxx Inscreva-se em meu canal de desenvolvimento para receber updates na home do YouTube:

http://www.youtube.com/user/TheGameDeveloperTG D ltima Edio: 24 Ago 2012 03:49 Por GutoThomas_. Responder Citar

Re: Artigo para iniciantes em JavaScript na Unity 23 Ago 2012 21:52 #111496
ESTRUTURAS DE REPETIO

Estruturas de repetio (Looping) permitem que voc repita comandos por um certo nmero de vezes, geralmente at que uma condio seja atingida. E se voc quisesse incrementar um nmero e mostrar o resultado no console? Voc poderia fazer dessa maneira:
var numero = 0; numero += 1; Debug.Log(numero); numero += 1; Debug.Log(numero); numero += 1; Debug.Log(numero);

GutoThomas_

OFFLINE Solid Postagens: 32

E assim por diante... Mas isso redundante, e no h nada que programadores preguiosos odeiam mais do que reescrever o mesmo cdigo vrias vezes! Ento, vamos usar um loop For:
var numero = 0; for(i=1; i <=10; i++) { numero+=1; Debug.Log(numero); }

Ok, essa declarao for, na segunda linha, pode parecer um pouco confusa. Mas na verdade bastante simples. i=1; Cria uma varivel temporria i e atribui a ela o valor 1. Note que voc no precisa usar var para declar-la, est implcito. i<=10; A condio para o loop ser executado. Neste caso, continue executando o loop enquanto i menor ou igual a 10. i++; Como incrementar o loop. Neste caso, ns estamos incrementando em 1, ento usamos i++, que a abreviao para i+=1;

Se ns estamos apenas exibindo do 1 at o 10, o nosso cdigo pode ser encurtado. Ns no precisamos da varivel numero:
for(i=1; i<=10; i++) Debug.Log(i);

Bem como declaraes if, chaves so opcionais quando h apenas uma declarao para ser executada. Podemos tambm contar para trs:
for(i=10; i>0; i--) Debug.Log(i);

Ou exibir todos os nmeros pares entre 1 e 10:


For(i=2; i<=10; i+=2) Debug.Log(i);

Podemos tambm usar um loop while(enquanto), uma alternativa para declaraes for. While executado repetidamente enquanto uma condio verdadeira.
var numero = 0; while(numero < 10) { numero++; Debug.Log(numero); }

Loops while so mais teis quando usados com boleanas. Apenas tenha certeza de que a condio de sada seja eventualmente atingida, ou voc estar preso em um loop infinito, o que ir ocasionar um crash em seu jogo!
var jogadorPulando = true; var contador = 0; while(jogadorPulando){ //faa as coisas relacionadas ao pulo contador++; if(contador > 100) jogadorPulando = false; } Debug.Log(Loop while finalizado!);

Percebeu a quarta linha? Aquela iniciada por duas barras? Isso significa que o texto aps elas um comentrio e no ser executado. Comentrios so

teis para exibir como o seu cdigo funciona, para servir de local onde sero inseridos cdigos posteriormente (como aconteceu acima), ou para comentar sees do seu cdigo por questes de depurao. FUNES

Se voc achou que loops poupavam tempo, espere at descobrir sobre as funes! Funes permitem que voc execute um monte de declaraes em um nico comando. Mas vamos manter as coisas simples inicialmente. Vamos definir(criar) uma funo que simplesmente exibe Ola Mundo no console.
function DizerOla () { Debug.Log(Ola Mundo); }

Para executar, ou chamar essa funo, apenas digite:


DizerOla();

Perceba os parnteses depois da nossa funo. Eles so necessrios, tanto na hora de definir a funo, como na hora de cham-la. Note tambm que o nome da nossa funo tem iniciais em maisculo. No precisa ter, mas capitalizar nomes de funes a norma na Unity. E se quisssemos uma funo que diz coisas diferentes? Ns podemos passar um valor, ou argumento, para a funo:
function DizerAlgo(texto) { Debug.Log(texto); }

Acima, texto o argumento, uma varivel temporria que pode ser usada apenas dentro da funo. Programando para iPhone? Voc deve especificar de que tipo o seu argumento, neste caso String.

function DizerAlgo(texto: String) { Agora, quando chamarmos nossa funo, precisamos prover um argumento:
DizerAlgo(Funes so legais!); // Tente evitar acentos

Ns podemos, tambm, passar variveis:


var meuTexto = Eu quero uma pizza; DizerAlgo(meuTexto);

Outra coisa legal que funes podem fazer retornar um valor. A seguinte funo avalia se o nmero par, e se for, retorna true(verdadeiro), caso contrrio, retorna false(falso).
function NumeroPar(numero) { if(numero % 2 == 0) //Nota: % retorna o resto da diviso de numero por 2 return true; else return false; } var numeroQualquer = 10; if(NumeroPar(numeroQualquer)) Debug.Log(Numero + numeroQualquer + e par!);

Quando o comando return executado em uma funo, a funo terminada imediatamente(para de ser executada). O comando return no precisa retornar um valor:
function Update () { If(!jogoIniciado) return; // sai da funo }

A function Update(), exibida acima, uma das funes principais na Unity. Voc no precisa chamar ela manualmente, ela chamada automaticamente a cada frame. Aprenda a programar em C# na Unity3D: http://www.youtube.com.br/user/xxgutoxxx Inscreva-se em meu canal de desenvolvimento para

receber updates na home do YouTube: http://www.youtube.com/user/TheGameDeveloperTG D ltima Edio: 24 Ago 2012 03:42 Por GutoThomas_. Responder Citar

Re: Artigo para iniciantes em JavaScript na Unity 24 Ago 2012 03:37 #111527
FUNES SOBRECARREGADAS

Funes podem ser sobrecarregadas. Parece complicado, mas realmente bem simples. Significa que voc pode ter mltiplas verses de uma funo, que trabalham com diferentes tipos de argumentos, ou diferentes nmeros de argumentos. Para manipular diferentes tipos de argumento, simplesmente use os dois pontos : para especificar o tipo do argumento que est sendo passado.

GutoThomas_

function ImprimirTipo(item: String) { Debug.Log(Eu sou uma string, tipo String); } function ImprimirTipo(item: int) { Debug.Log(Eu sou um inteiro, tipo int); } function ImprimirTipo(item: float) { Debug.Log(Eu sou um float, tipo float); } function ImprimirTipo(item: boolean) { Debug.Log(Eu sou uma boleana, tipo boolean); } function ImprimirTipo(item: Array) { Debug.Log(Eu sou um vetor, tipo Array); } function ImprimirTipo(item: GameObject) { // aceita tudo Debug.Log(Eu sou qualquer outra coisa); } function ImprimirTipo() { Debug.Log(Voc esqueceu de passar um argumento!);

OFFLINE Solid Postagens: 32

} ImprimirTipo(); ImprimirTipo(Ola); ImprimirTipo(true);

CLASSES

Ento, variveis podem ser de diferentes tipos, tais como String e int. Mas e se ns necessitssemos de um novo tipo que fizesse algo diferente? Classes so simplesmente novos tipos que VOC cria.
class Pessoa { var nome; var profissao; } // Cria um objeto do tipo Pessoa var joao = Pessoa(); joao.nome = Joao Smith; joao.profissao = Medico; Debug.Log(joao.nome + e um + joao.profissao);

A classe acima tem duas variveis ou propriedades nome e profissao. Voc as acessa digitando o nome da instncia (nesse caso joao) seguido de um ponto e o nome da propriedade. Voc pode, tambm, passar argumentos quando criar instncias de uma classe. Voc faz isso criando um construtor, que uma funo especial, chamada automaticamente sempre que uma nova instncia da sua classe criada.
class Animal { var nome; function Animal (n: String) { // Esse o construtor nome = n; Debug.Log(nome + nasceu!); } } gato = Animal(Whiskers);

Classes podem ter funes normais, tambm. Funes de uma classe so, algumas vezes, chamadas de mtodos. Novamente, voc acessa estes digitando o nome da sua instncia, seguido de um ponto e o nome da funo (no se esquea dos parnteses). Isso til

para ter instncias interagindo entre si:


class Pessoa{ var nome : String; function Pessoa(n : String){ // Construtor nome = n; } function beijar(p : Pessoa){ + Debug.Log(nome + " beijou " p.nome + "!"); } } jenni = Pessoa (Jenni); bob = Pessoa(Bob); jenni.beijar(bob);

HERANA

Classes podem herdar ou estender (adicionar funcionalidades a) outra classe. A classe que herdada geralmente chamada de classe base ou classe pai. A classe que herda chamada de classe filha ou classe derivada. Essa vai ser a nossa classe base:
class Pessoa { var nome: String; function Pessoa(n: String) { // construtor nome = n; } function Caminhar() { // funo da classe Debug.Log(nome + esta caminhando); } }

Para herdar dessa classe, crie uma nova classe com a palavra reservada extends:
class Mulher extends Pessoa { var sexo: String;

function Mulher(n: String) { super(n); // chama o constructor original e armazena o nome sexo = feminino; // adiciona funcionalidade classe derivada } function Caminhar { super.Walk(); // chama a funo original (da classe base) Debug.Log(E ela e tao sexy!); // adiciona funcionalidade classe derivada } }

Note que podemos acessar as propriedades e mtodos da classe base/pai usando a palavra reservada super. Se criarmos uma instncia de Mulher e chamarmos a funo Caminhar(), ambas as funes das classes pai e filho so chamadas:
amanda = Mulher(Amanda); amanda.Caminhar();

TIPOS E PROPRIEDADES INCLUDOS Agora voc est provavelmente se perguntando: se classes, os tipos que ns criamos, podem ter propriedades e funes, por que os tipos includos (int, String...) no podem ter? Na verdade, eles podem. Para converter um inteiro em uma String, use a funo includa ToString();
var numero = 10; var texto = numero.ToString();

Para ter acesso quantidade de elementos em um vetor (ou em uma String), use a propriedade includa, length:
var animais = Array(gato, cachorro, porco, golfinho, chimpanz); var numeroDeElementos = animais.length;

Voc pode usar isso em um loop do tipo for. Adiciona as seguintes linhas para o cdigo acima:
for(i=0; i < animais.length; i++) {

Debug.Log(animais[i]); }

Isso exibe o contedo do nosso vetor, item-a-item. Para adicionar um item a um vetor, use a funo Add():
animais.Add(lmure);

Para separar uma String em um vetor, use a funo Split():


var sentenca = a rpida raposa marrom pulou sobre o cachorro preguioso; var palavras = sentenca.Split( [0]); Debug.Log(Array(words));

Para obter parte de uma String, use a funo Substring(). Substring aceita dois argumentos, o ndice inicial e o final.
var sentenca = a rpida raposa marrom pulou sobre o cachorro preguioso; var primeiraMetade = sentenca.Substring(0, 19); Debug.Log(primeiraMetade);

Para capitalizar uma string de texto, use a funo ToUpper();


var missao = va fazer jogos legais!; Debug.Log(missao.ToUpper());

E como voc deveria esperar, tambm h uma funo para deixar todas as letras em minsculo, ToLower():
Debug.Log((FIM).ToLower());

INFORMAES ADICIONAIS Pgina de Referncia de Script da Unity

E por aqui termino a traduo desse artigo. Espero que voc faa um bom proveito do mesmo, a leitura vale pena! Lembrando mais uma vez de que esse artigo foi originalmente escrito pelo usurio tonyd, do frum

da Unity3D. O link para o tpico original pode ser encontrado no primeiro post. Grande abrao! Aprenda a programar em C# na Unity3D: http://www.youtube.com.br/user/xxgutoxxx Inscreva-se em meu canal de desenvolvimento para receber updates na home do YouTube: http://www.youtube.com/user/TheGameDeveloperTG D

Vous aimerez peut-être aussi