You are on page 1of 23

14/09/13

Viso Geral do Unity

Viso Geral do Unity


Escrito por Bruno Xavier

retw eet

Curtir

Uma pessoa curtiu isso. Seja o primeiro entre seus amigos.

Com a adeso crescente de novos usurios Unity, tanto aqui na comunidade quanto mundo fora, busco atravs deste tutorial expressar uma viso geral sobre a engine, suas ferramentas e ajudar os aventureiros e curiosos a terem uma experincia prvia de uma rotina de trabalho no ambiente da ferramenta. Este tutorial uma compilao de conceitos e conhecimentos bsicos que todo desenvolvedor em Unity precisa ter antes de partir para qualquer tipo de projeto e graas esplndida estrutura em que a Unity desenhada voc pode facilmente produzir enquanto aprende. Pensando nisso, vejamos o que ser explorado neste pequeno tutorial: Entendo Assets, GameObjects e Components. Importando Skinned Meshes e trabalhando com animaes. Conhecendo melhor o Builtin Controller Component. Entendendo Unity's JavaScript, suas funes e co-rotinas. Trabalhando com Classes, Helper Functions e cdigo Frame-Dependente. Colocando tudo em prtica. O que voc j precisa dominar para melhor aproveitamento e entendimento deste tutorial: Ser familiarizado com a interface do Unity Editor. Possuir algum personagem 3D animado ou saber como produzir um em seu software de preferncia. Ter acesso aos guias e manuais oficiais da Unity para referncia. Ter um conhecimento mnimo da estrutura e programao em JavaScript.

Sendo assim, vamos l:

1. Entendo Assets, GameObjects e Components:


pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page= 1/23

14/09/13

Viso Geral do Unity

1.1 Assets:
Assets, se voc j andou explorando as funcionalidades e documentao, j deve ter em mente que os Assets so os arquivos fsicos de seu projeto. No h nenhum segredo aqui, todos os seus modelos 3D, arquivos de udio, scripts, etc e etc que precisam ser estocados em disco so parte desta classe de seu projeto, os recursos com o qual voc ir trabalhar encima de seu projeto.

Antes que um Asset possa ser utilizado necessrio que voc tenha um projeto criado e adicione o arquivo desejado dentro da pasta Asset na pasta raiz do projeto. Uma funcionalidade incrvel da Unity que voc pode trabalhar, por exemplo, em suas cenas 3D e apenas clicando save no modelador o resultado automaticamente atualizado na Unity, voc apenas assiste a engine re-compilando a cena e logo em seguida o resultado pode ser facilmente visualizado no Scene View. D uma olhada no guia bsico da Unity para um melhor entendimento.

1.2 GameObjects:

Todo objeto que faz parte do mundo 3D de sua cena e possui um Component Transform um GameObject. Um Transform apenas um componente ligado ao objeto que indica que o mesmo tem volume, escala ou apenas se localiza em algum ponto no mundo 3D de sua cena, so as bsicas informaes XYZ. Ao trabalhar na Unity, voc geralmente usa um Asset como base para criar seu GameObject e com o auxilio de Components vai adicionando funcionalidades, com o GameObject implementado da maneira que voc deseja, sempre boa prtica converter o GameObject em um Prefab para melhor organizao, melhor performance e facilidade de re-uso de seus objetos entre os vrios leveis que pode ter o seu game. Prefabs so outra ferramenta de destaque extremamente teis e poderosas na Unity. Consulte a documentao para melhor informao.

1.3 Componentes

pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page=

2/23

14/09/13

Viso Geral do Unity

Sem eles impossvel dar vida qualquer objeto que faa parte de seu cenrio. Os Components so a essncia de como as coisas na Unity funcionam, so a maior expresso das facilidades de trabalho que a engine oferece. Scripts so Components, objetos e efeitos de fsica, partculas, udio e etc so todos Components que podem ser adicionados ao seu GameObject para fazelo se comportar dar maneira que voc deseja no game. importantssimo ter uma viso clara de como os Components funcionam e como se relacionam entre si. Mais sobre isso ser falado durante a seo de programao, mas se voc sente que no entende realmente o que exatamente so essas coisas, procure pensar que Components so Itens que formam um item ainda maior, seu objeto na cena, e que eles controlam todas as caractersticas do objeto no game. Um GameObject sem Components um objeto sem caracterstica alguma, por isso no pode ser manipulado de forma alguma e provavelmente um objeto intil para o seu projeto neste ponto. Simplificando, Components so propriedades que tornam seus GameObjects nicos atravs da combinao entre as ferramentas providas pela Unity e os Assets que voc produz. assim justo dizer que quanto melhor forem os Assets que voc produz, melhores sero seus GameObjects e maiores as capacidades de seus Components de realizar exatamente tudo que voc deseja extrair deles.

2. Importando Skinned Meshes e trabalhando com animaes


Voc j conhece bem a interface da Unity e agora tem um entendimento mais claro dos como e por qu seus objetos funcionam. Sendo assim, partiremos para um pequeno experimento prtico, importar um personagem animado e dar funcionalidade ele.

2.1 O Personagem

Se voc no possui um personagem animado, divirta-se, crie um! :) Para este personagem em questo que eu usarei, existem algumas notas que devem estar em mente. Eu tenho a inteno de utilizar efeitos de fsica real no personagem, por isso neste caso h duas verses dele, uma sem Skin com todas as partes do corpo separadas em pedaos para serem adicionadas componentes fsicos e gerar um efeito rpido e fcil diferenciado de ragdoll onde o personagem explode ao morrer. E a verso convencional com a Skin e animaes como de costume. Este um caso especfico do meu trabalho em questo, voc no obrigado a fazer um personagem da mesma maneira, use sua liberdade e imaginao.

2.2 Implementando o Personagem


pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page= 3/23

14/09/13

Viso Geral do Unity

Por motivos de Pipeline, j utilizo o formato FBX um bom tempo, eu continuo usando FBX mesmo na Unity, por convenincia. Voc pode utilizar o formato que preferir e se adaptar melhor. Bom, aps um tempo relativamente grande, voc modelou, texturizou, animou seu querido personagem e est pronto pra faze-lo mandar ver na Unity. Apesar das facilidades que a Unity oferece, voc precisa ter em mente que certas convenes devem ser seguidas. Antes de qualquer coisa, adicione seu modelo em qualquer diretrio dentro da pasta Assets do seu projeto, a Unity ir detectar o arquivo e ele aparecer na lista do Inspector com todas suas opes de importao. No mecha em absolutamente nada, click e arraste o modelo da lista do Project View para a Scene View e veja o que acontece. Seu personagem aparece na cena sem problemas? timo, voc um cara de sorte! Click Play e rode o game, veja se as animaes rodam normalmente como esperado. As animaes esto ok? timo, voc mesmo um cara de sorte! :) Ao arrastar o personagem para a cena, ele est distorcido, como se os bones no estivessem nas posies corretas ou coisa semelhante? Opa, volte ao seu modelador 3D e reveja seus conceitos, evite criar uma hierarquia muito complexa de parents e childs, grupos e sub grupos quando se trata de um personagem animado. Ao arrastar o personagem para a cena, o modelo parece estar ok, mas as animaes simplesmente no tocam ou existe algo de errado com elas, como se suas animaes no estivessem ali? Opa, volte ao seu modelador 3D e reveja novamente seus conceitos, se voc tem conhecimento bsico sobre animao deve saber que as animaes de controladores e parentes dos bones, efeitos fsicos, driven keys e etc, no so automaticamente adicionados aos bones do seu modelo no momento da exportao, por isso, se for o caso de haver animaes faltando ou animaes faltando pedaos, voc precisa ter certeza de que todos os movimentos que faz est gerando animation keys nos bones do personagem ou seja, voc precisa usar a soluo Bake Animations. Voc pode fazer isso diretamente na Unity simplesmente acionando a checkbox de mesmo nome no Importer do seu modelo ou se quiser mais controle sobre os resultados, faa isso voc mesmo no modelador, os resultados so mais fceis de serem mantidos da maneira que voc exatamente quer. Se voc no sabe como fazer um bake em suas animaes, consulte a documentao do seu programa ou pea socorro comunidade l no frum da Unity, sempre tem algum perguntando sobre este tipo de problema. No geral, clicando em Bake Animations na Unity vai resolver seus problemas e muita dor de cabea se voc no gosta de ficar horas otimizando keys no seu modelador 3D. Aps ajustadas as configuraes de importao, seu personagem animado da maneira que voc espera? timo, hora de prepara-lo para o futuro que o reserva, no Importer do seu modelo, clicando no arquivo importado no Project View ficar visvel no Inspector, voc ver que existe uma variedade grande de opes e propriedades. Seja um bom amigo com voc mesmo e pesquise na documentao cada uma dessas caractersticas e opes para ter uma viso mais intuitiva e verdadeira do que cada uma delas possa vir a ser. Mais abaixo no Inspector, existe um pequeno grupo que acionado quando voc seleciona a opo Split Animations. Click nessa opo e voc ter acesso a ferramenta mais simples da terra para criar clips de animaes. Voc pode dar um nome aos clips e definir o incio e fim da animao, seu WrapMode e etc de maneira rpida, fcil e visual. Neste ponto, extremamente recomendvel criar um Prefab para seguir seu trabalho, voc no pode trabalhar diretamente encima do Asset do seu personagem por isso boa prtica criar um GameObject com seu personagem, apenas arraste ele do Project View para a Scene View, no menu Assets click em Create New > Prefab, renomeie o Prefab com o nome que quiser e arraste seu personagem da Scene View para cima do Prefab. Pronto, voc tem uma instncia totalmente reutilizvel do seu personagem em que qualquer mudana no Inspector afetar todas as cpias do objeto em sua cena. Aps configurar seus clips, seu personagem est pronto para ser animado in-game... Mas hey, e agora? Como se anima o personagem, pergunta-se o afobado aprendiz...
pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page= 4/23

14/09/13

Viso Geral do Unity

A resposta para isso se resume uma palavra Scripts! Mas antes, precisamos ter uma ideia mais aprofundada do que exatamente vamos animar. uma boa hora para pesquisar sobre o Character Controller Component!

3. Conhecendo melhor o Builtin Controller Component


primeira vista voc deve estar imaginando que este componente responsvel pelo controle das animaes de seu personagem durante a execuo de seu game, certo... Errado! :P O Component responsvel pelas animaes, voc j passou por ele, seus Animation Clips esto prontos, lembra? A partir da voc pode animar seu personagem atravs de qualquer script; Mas interessante analisar a relao restrita entre o Controller, que controla a interatividade entre o jogador e a jogabilidade estabelecida por voc, no caso o controle do personagem em questo. O Controller Component existe para facilitar a sua vida na hora de identificar aes e inputs tanto do player quanto do ambiente que cerca seu personagem para uma interao funcional mais rpida prtica e intuitiva. Sem essa belezinha voc teria deliciosas dores de cabea para conseguir fazer seu personagem interagir com o resto dos objetos no game e responder aos comandos do jogador. Existe tambm uma variao mais complexa de Controller, totalmente baseada em fsica real, mas um tpico muito nex-gen e avanado demais pra mim no momento e no meu foco neste tutorial, vamos examinar inicialmente o Controller bsico. Se voc ainda no leu a respeito deste componente na documentao, esta a hora. Aps ler a documentao, voc agora deve saber bem que um Controller basicamente permite que voc d interatividade ao objeto em que o Component est ligado de maneira que esse objeto interaja com o ambiente fsico ao redor. Baseado neste fundamento, voc pode ter certeza, se voc nunca trabalhou com fsica real antes, ou voc aprende um pouco sobre fsica ou aprende muito sobre fsica por que a Unity se aproveita ao mximo de todas as formas de manipulao fsica e estudar um pouco a respeito desta matria bastante saudvel para facilitar sua vida. Na Unity voc ir programar como nunca voltado interatividade com fsica real, mesmo que o componente em questo no seja baseado em fsica. Por mais que seja um tanto incmodo precisar fazer certos clculos para atingir certos resultados por conta da fsica, cedo ou tarde voc acaba percebendo que esta forma de trabalho diminui de maneira gritante a quantidade de cdigo que voc precisa para realizar efeitos complexos e poderosos de mesmo nvel que qualquer game comercial existente no mercado. No vou entrar em extremos detalhes aqui por que seria redundante ficar citando o que j muito bem explicado na documentao, mas ao trabalhar com Character Controllers, tome sempre um cuidado especial com Physical Materials e com as propriedades do Controller, Height e Skin Width. aconselhvel sempre manter a propriedade Min Move Distance em zero, a no ser que voc tenha mesmo um bom motivo para no faze-lo. Todos scripts que forem criados com inteno de manipularem a interatividade do personagem faro referncia este componente de alguma forma ento, antes de prosseguir, faa os ajustes que achar necessrio, experimente bastante com cada propriedade do componente e personifique da maneira que achar melhor. Com o Controller Component adicionado ao seu personagem, ao seleciona-lo voc j deve ter notado que aparece um Capsule Collider ligado ao mesmo. Ajuste a posio e volume do Collider da maneira que puder de modo que ele represente bem o volume geral do corpo de seu personagem. Para testes, crie uma Box com um Collider Component, modifique sua escala e a utilize como cho, click Play e verifique se os ps de seu personagem no esto flutuando ou afundando no cho, faa os ajustes que achar necessrios para ter uma coliso refinada entre seu personagem e os objetos que virem a existir no seu cenrio. Quando atingir o resultado que deseja, voc pode sempre adicionar as mudanas ao Prefab do Personagem se houver um. Isso afeta todas as cpias do seu Personagem, independente de qual cenrio voc esteja trabalhando. Aps estes pequenos ajustes, estamos prontos para comear a programar. Voc pode escolher a linguagem de suporte que achar melhor, eu prefiro JavaScript :)

4. Entendendo Unity's JavaScript, suas funes e co-rotinas


Lembre-se que a estrutura aqui JavaScript, para C# existem pequenas diferenas que devem ser levadas em conta ao programar, se voc est iniciando em Unity como eu, extremamente recomendvel comear com JavaScript ao invs de C# pois a comunidade d muito mais suporte a JavaScript na prtica. Antes de entrarmos em detalhes, importante ressaltar que a Unity tem como expectativa assumir que voc, como programador, siga as convenes estabelecidas para programao na ferramenta. sempre importante lembrar que a engine espera que voc siga os padres de nomenclatura para funes e variveis, isso no exatamente obrigatrio, voc pode no seguir nada disso se quiser, mas no fim das contas voc apenas acaba gerando problemas a si prprio. Tendo isso em mente, vejamos as convenes adotadas na Unity mais importantes que so adotadas por toda a comunidade que busca sempre utilizar a ferramenta com eficincia e clareza.

4.1 Nomeando Funes


pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page= 5/23

14/09/13

Viso Geral do Unity

Quando criar uma funo, lembre-se de que o nome de cada funo deve comear com um caractere legal e sempre em letra maiscula. Sabendo disso e seguindo esta padronizao, lhe salvar uma vida de problemas e bugs que voc mesmo escreveu e no consegue resolver pelo simples fato de no ter seguido uma conveno to simples. Se a funo um conjunto de vrias palavras, voc pode optar por usar underlines se quiser, mas aconselhvel apenas seguir o padro, como por exemplo, MyFunctionName(). Assim quando um problema surgir no debug e apontar para um identificador, voc tem certeza absoluta de que o caso se trata de uma funo e no qualquer outro tipo de dados.

4.2 Nomeando Variveis


Assim como na criao de uma funo, boa prtica seguir o padro estabelecido pela comunidade e desenvolvedores da engine, a simples diferena aqui que nomes para variveis sempre devem iniciar com um caractere legal em letra minscula. Exemplo, minhaVariavel : int;

4.3 Funes
Este ponto onde a coisa pode complicar de incio para programadores que no esto acostumados a seguir o tipo de lgica adotado na Unity. A engine, por padro, faz todo o trabalho sujo de controle do software, execuo, loops, carregos e despejos, etc e etc. Sendo assim, ela trabalha com funes padronizadas que todos os scripts que voc escreva iro utilizar uma ou outra de alguma forma. Por exemplo, na Unity voc no cria um loop principal para a execuo do seu game, pois ele j est l antes mesmo de voc comear a programar. Voc apenas precisa chamar uma instncia da funo responsvel pelo loop, no caso Update(). Isso vai parecer muito confuso no incio, voc comea a se perguntar, ao criar vrios scripts com a mesma funo, qual desses updates o principal?... O caso que toda funo que voc criar com o nome de Update(), sero todas ao mesmo tempo o seu loop principal. No me pergunte como a engine faz isso, mas ao compilar seus scripts a Unity detecta todas as instncias das funes com nome que ela j conhece, transforma todas as funes em uma nica funo e seu cdigo est pronto para rodar. O que ainda mais incrvel que ela faz isso mesmo com seu projeto aberto no editor, no necessrio compilar nada, a engine faz tudo sozinha, voc apenas clica Play! Vejamos uma relao das funes e mtodos padronizados mais importantes que voc usar com frequncia:

4.4 Function Awake(){...}:


Essa funo, se existente em seu script, executada sempre que o script carregado na memria. Mesmo que voc no a chame em momento algum, essa funo ser sempre executada, basta declara-la e todas as aes que voc definir na funo sero executadas imediatamente no mesmo momento em que o GameObject que contm o script for carregado. No se faz uma chamada para esse tipo de funo, ela apenas declarada. Geralmente essa funo utilizada somente para captura de valores para variveis recm-declaradas. Consulte a documentao para maiores informaes.

4.5 Function Start(){...}:


Essa funo, se existente em seu script, no executada assim que seu script carregado, mas ela atua de maneira muito interessante. Voc no precisa chamar esta funo de lugar algum, ela ser automaticamente executada uma nica vez antes que qualquer loop do seu script seja executado pela primeira vez, ou seja, antes do primeiro loop.

4.6 Function Update(){...}:


Essa funo, se existente em seu script, sempre executada cada frame. Voc no precisa fazer nenhum tipo de referncia ou chamada, ela apenas ser executada como forma de loop principal do seu script, no necessariamente do seu programa, mas de tudo que executado no script em questo.

4.7 Function FixedUpdate(){...}:


Essa funo uma variante de Update(), um loop dedicado proporcionar melhor funcionalidade para qualquer efeito diretamente ligado RigidBodies. Voc pode tanto ter uma FixedUpdate() quanto uma Update() no mesmo script, os loops diretamente ligados execuo do game so sempre interligados entre si e a execuo de um loop no interfere na execuo de outro.

4.8 Function LateUpdate(){...}:


Essa funo, tambm variante de Update() um loop para chamada especfica de aes que voc deseja executar somente quando todas as instancias de Update() j foram executadas. muito til para a implementao de animaes via script, restries de movimento ou posio de objetos, etc. Existem muitos outros loops pr-determinados pela Unity sempre estabelecidos de maneira que possam agilizar seu trabalho.
pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page= 6/23

14/09/13

Viso Geral do Unity

Consulte a documentao e pesquise sobre loops distintos existentes em vrias classes da engine. Procure se familiarizar com a relao geral desses loops entre si, mas concentre-se apenas em dominar as funes descritas acima, sem um domnio claro do uso dessas funes e de como elas podem ser utilizadas em seu projeto, todo o resto se torna uma pilha de informaes sem sentido no momento em que voc for programar qualquer coisa com a Unity.

5. Trabalhando com Classes, Helper Functions e cdigo Frame-Dependente


Um fato curioso sobre trabalhar com a Unity que voc vai precisar utilizar classes em casos relativamente raros em seu projeto, ao contrrio de muitas outras engines ou plataformas existentes por a. Isso se d pelo fato de que a Unity to bem projetada que qualquer coisa que voc queira criar provavelmente j se encaixa como descendente de alguma classe j existente na Unity ento a criao de classes em seu game raramente se tornar uma rotina. Apesar disso, existem casos em que a criao de classes ser extremamente til e tornar seu script muito mais malevel e poderoso. O uso de classes tambm pode facilitar a leitura de seu cdigo, tornando sua escrita mais elegante e muito bem organizada de modo que em um trabalho feito por uma equipe, a criao de co-rotinas por outro programador fica muito agradvel de forma que seu colega no precisa realmente dominar totalmente todos os pormenores da classe que voc escreveu. Helper functions, co-rotinas, so inicialmente uma ferramenta chave para manter a organizao de seu cdigo, tornando-o ainda mais legvel que de costume e ajuda a facilitar a procura por bugs que cedo ou tarde inevitavelmente acabam surgindo durante sua produo. Outra caracterstica importante sobre co-rotinas que elas abrem um outro leque de possibilidades como as to importantes funes dependentes de tempo ou frame-rate.

5.1 Classes
A Unity j disponibiliza uma lista robusta de classes que voc usa e abusa, mas interessante ter a possibilidade de criar classes customizadas inteiramente dedicadas um tipo especfico de objeto em seu game, por exemplo, uma classe dedicada somente ao controle do seu personagem, outra classe dedicada somente execuo de animaes do personagem, outra classe que ativa triggers que otimizam a interatividade de seu personagem com o ambiente, etc.

5.2 Helper Functions


A primeira funcionalidade de importncia real que voc vai encontrar para o uso obrigatrio deste tipo de funes a possibilidade de utilizar, a partir dessas co-rotinas, funes que derivam da classe Yield. Funes do tipo Yield no podem ser chamadas de loops principais como Update() por que elas tem como caracterstica interromper a execuo do loop, veja bem, do loop que chama a funo, no seu programa como um todo. Essa distino pouco comum entre funes na Unity proporciona uma maleabilidade incrvel na manipulao de seu cdigo. Voc pode interromper partes da execuo de um loop enquanto que outra parte do mesmo loop pode continuar sendo executada normalmente. Tal funcionalidade muito til para muitas situaes que possam surgir, mas com certeza este tipo de funo largamente utilizado para um controle preciso e refinamento de animaes e timing que voc ir se deparar cedo ou tarde.

5.3 Cdigo Frame-Dependente


A Unity j disponibiliza funes plenas para manipulao e checagem de tempo que esto sempre a disposio para lhe dar suporte no momento em que precisar. Se voc no est acostumado a utilizar o conceito de Delta-Time, consulte a documentao da classe Time na referncia de scripting. Voc vai encontrar variveis muito teis como Time.deltaTime que podem facilitar suas animaes via script de maneira suave e limpa.

6. Colocando tudo em prtica


Agora que j temos uma viso mais ampla das caractersticas da engine que envolvem a implementao de um personagem interativo na Unity, vamos arregaar as mangas e botar as mos na massa! :) Nota: Meu projeto em particular se trata de um platformer, e no site da Unity voc pode encontrar muito material de referncia que estou usando como guia base tanto para este tutorial quanto para o desenvolvimento do meu projeto pessoal. Sinta-se sempre compelido a baixar tudo que o site da Unity oferece e examine de cabo rabo todos os scripts que carem em suas mos. No tutorial bsico para um 2D Platformer, voc poder perceber que existem muitas funes implementadas pelo Flashbang Studios que tambm so usadas aqui de forma muito semelhante, se no idnticas em alguns casos. Lembre-se de que nem tudo se trata de autoria, muita coisa se trata de pesquisa. No trate o hbito de pesquisar como algo ruim, isso apenas vai lhe impedir de compartilhar com gente muito mais experiente e com conhecimento muito mais profundo do que o seu. Mantenha a mente aberta! :)

6.1 Importe o Asset de seu personagem


Crie um GameObject, crie um Prefab e estamos prontos para comear a botar as ideias em prtica. Por enquanto no se preocupe com esse Prefab, apenas seguimos em frente com nosso personagem existente na cena.
pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page= 7/23

14/09/13

Viso Geral do Unity

6.2 Crie uma pasta no Project View


Aps criar a paste, renomeie para Scripts. Em seguida, selecione essa mesma pasta, v at Assets > Create > JavaScript. Um script descendente da classe MonoBehavior ser criado na paste selecionada. Selecione o script criado e renomeie com o mesmo nome de seu personagem, apenas para melhor organizao.

6.3 Criando um Componente


Agora que j temos um Component que podemos trabalhar encima de nosso personagem, na Hierarchy View selecione seu personagem, v at Components > Create New > NomeDeSeuScript. Notou como o script que criou aparece instantaneamente no menu? Coisa linda no? Selecione o script de seu personagem, preste ateno nas propriedades no Inspector de seu personagem, ele agora tambm lista o componente recm-adicionado. Seu Script um componente como qualquer outro ligado ao personagem, se quiser voc pode aplicar as mudanas do GameObject ao seu Prefab. Selecione a opo Edit no Component Script de seu personagem ou d um duplo clique no script no Project View, a Unity ir iniciar seu editor padro para a edio de scripts. Voc pode utilizar qualquer editor que quiser para isso, o editor de scripts sempre um programa externo, voc pode tambm customizar de modo forado as opes do editor padro, mas isso j contedo para um outro tutorial, nos manteremos focados ao que realmente importa aqui.

6.4 Editando um Script


Ao abrir seu script para edio, por padro a Unity j o cria com uma funo Update() vazia. Isso, por enquanto, no muito til. Agora, vamos parar e pensar um pouco... O que queremos fazer aqui? -Bota essa budega pra funf, e para de blahblah, diz o afoito aprendiz. Bom, sem entendermos bem o que exatamente queremos fazer, no ser possvel fazermos exatamente nada de til ou conciso ento vamos nos concentrar em um nico conceito e trabalhar encima disso... Controle de Personagem? Animao? GamePlay? T legal vamos animar nosso personagem, j que isso parece ser o mais lgico a ser feito primeiro, ao menos mais lgico para mim. Em seu script, selecione a funo Update() vazia e apague. No precisamos dela agora. Primeiro vamos pensar de modo genrico sobre as aes de nosso personagem. O que ele ir fazer no game? Vai andar? Correr? Pular? Etc. Com isso em mente, j temos algo por onde comear, hora de comear a cuspir variveis que achamos que podem ser teis. Lembre-se, se voc no conhece um mnimo de JavaScript, ao menos a syntax, voc pode ter experincias desagradveis ao programar. Tenha certeza de que j se sente confortvel com a programao nesta linguagem e que sua syntax no parea algo aliengena. Sendo assim, vamos l. Criando as variveis: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 v a rs n e a k A n i m a t i o n S p e e d M o d i f i e r=1 . 5 ; v a rw a l k A n i m a t i o n S p e e d M o d i f i e r=2 . 5 ; v a rr u n A n i m a t i o n S p e e d M o d i f i e r=1 . 5 ; v a rj u m p A n i m a t i o n S p e e d M o d i f i e r=2 . 0 ; v a rj u m p L a n d A n i m a t i o n S p e e d M o d i f i e r=3 . 0 ; v a rg e t D o w n A n i m a t i o n S p e e d M o d i f i e r=1 . 5 ; v a rh a n g T i m e U n t i l F a l l i n g A n i m a t i o n=0 . 0 5 ; p r i v a t ev a rf l o o r H i t F X:A u d i o C l i p ;
?

Cada varivel tem um propsito, conforme descrito a seguir: sneakAnimationSpeedModifier: Usaremos esta varivel para um controle mais gil da velocidade em que a animao Sneak ser executada. walkAnimationSpeedModifier: Usaremos esta varivel para controlar a velocidade em que a animao Walk ser executada. runAnimationSpeedModifier: Usaremos esta varivel para controlar a velocidade em que a animao Run ser executada. jumpAnimationSpeedModifier: Usaremos esta varivel para controlar a velocidade em que a animao Jump ser executada. jumpLandAnimationSpeedModifier: Usaremos esta varivel para controlar a velocidade em que as animaes Landing e Landed sero executadas. getDownAnimationSpeedModifier: Usaremos esta varivel para controlar a velocidade em que a animao Get Down ser executada.
pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page= 8/23

14/09/13

Viso Geral do Unity

hangTimeUntilFallingAnimation: Usaremos esta varivel para identificar quanto tempo faz que o personagem est em queda livre. floorHitFX: Usaremos esta varivel do tipo AudioClip para guardar um pointer para o som que queremos tocar quando o personagem atinge o cho de maneira descontrolada. Se isso parecer confuso, consulte a classe AudioClip na documentao. A regra private, ao contrrio do que parece, no isola sua varivel contra acesso de outros scripts. Na verdade deveria, mas sempre existe alguma maneira de acessar uma varivel privada se preciso, ento apenas uma questo de isolar a varivel para que ela no esteja amostra no Inspector. Aps definir suas variveis, selecione seu personagem ou Prefab, observe no Inspector como elas se tornaram parte das propriedades do seu script. Essa funcionalidade do Inspector sem palavras, torna seu trabalho to dinmico.

6.5 Implementando o Personagem


Agora que temos nossas variveis, podemos trabalhar encima disso, dando elas as funcionalidades que buscamos. Com o conceito de controle de nossas animaes em mente, vamos iniciar a estrutura bsica que coloca em prtica os clips de animaes que criamos anteriormente na importao do Asset do personagem: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 f u n c t i o nS t a r t ( ){ a n i m a t i o n . S t o p ( ) ; v a rj u m p i n g L a y e r=1 ; v a ra f t e r J u m p L a y e r=2 ; v a rj u m p=a n i m a t i o n [ " J u m p " ] ; j u m p . l a y e r=j u m p i n g L a y e r ; j u m p . s p e e d* =j u m p A n i m a t i o n S p e e d M o d i f i e r ; v a rj u m p F a l l=a n i m a t i o n [ " S m a l lF a l l " ] ; j u m p F a l l . l a y e r=j u m p i n g L a y e r ; v a rf r e e F a l l=a n i m a t i o n [ " F a l l " ] ; f r e e F a l l . l a y e r=a f t e r J u m p L a y e r ; v a rf a l l I m p a c t=a n i m a t i o n [ " F l o o rI m p a c t " ] ; f a l l I m p a c t . l a y e r=a f t e r J u m p L a y e r ; f a l l I m p a c t . s p e e d* =3 ; v a rf a l l G e t U p=a n i m a t i o n [ " G e tU p " ] ; f a l l G e t U p . l a y e r=a f t e r J u m p L a y e r ; f a l l G e t U p . s p e e d* =0 . 9 5 ; v a rs t a y J u m p i n g=a n i m a t i o n [ " S t a yJ u m p i n g " ] ; s t a y J u m p i n g . l a y e r=a f t e r J u m p L a y e r ; v a rj u m p L a n d i n g=a n i m a t i o n [ " L a n d i n g " ] ; j u m p L a n d i n g . l a y e r=a f t e r J u m p L a y e r ; j u m p L a n d i n g . s p e e d* =j u m p L a n d A n i m a t i o n S p e e d M o d i f i e r * 2 . 5 ; v a rj u m p L a n d=a n i m a t i o n [ " L a n d e d " ] ; j u m p L a n d . l a y e r=j u m p i n g L a y e r ; j u m p L a n d . s p e e d* =j u m p L a n d A n i m a t i o n S p e e d M o d i f i e r ; v a rr u n=a n i m a t i o n [ " R u n " ] ; r u n . s p e e d* =r u n A n i m a t i o n S p e e d M o d i f i e r ; v a rw a l k=a n i m a t i o n [ " W a l k " ] ; w a l k . s p e e d* =w a l k A n i m a t i o n S p e e d M o d i f i e r ; v a rs n e a k=a n i m a t i o n [ " S n e a k " ] ; s n e a k . s p e e d* =s n e a k A n i m a t i o n S p e e d M o d i f i e r ; v a rg e t D o w n=a n i m a t i o n [ " G e tD o w n " ] ; g e t D o w n . s p e e d* =g e t D o w n A n i m a t i o n S p e e d M o d i f i e r ; v a rs m a l l I m p a c t=a n i m a t i o n [ " S m a l lI m p a c t " ] ; s m a l l I m p a c t . l a y e r=a f t e r J u m p L a y e r ;
?

Note que este bloco de cdigo apenas inicializa as variveis com os valores desejados. Isso poderia ser feito em qualquer ponto fora da funo Start(), mas como queremos ter certeza de que as variveis sero inicializadas antes que qualquer loop comece a rodar, inicializamos as variveis desta forma.

6.6 Trabalhando com Animaes no Procedurais


Trabalhar com animaes no procedurais relativamente simples, ento tudo que precisamos de um punhado de aes e
pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page= 9/23

14/09/13

Viso Geral do Unity

reaes controlados por mais um punhado de estruturas baseadas em Cases ou Ifs. Com nossas variveis inicializadas, s nos resta implementar os resultados no personagem durante a execuo do game, ento devemos trabalhar na funo Update(). Antes disso, criaremos algumas co-rotinas que podem auxiliar algumas tarefas durante a execuo das animaes: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 f u n c t i o nD i d J u m p ( ){ a n i m a t i o n . P l a y ( " J u m p " ) ; a n i m a t i o n . P l a y Q u e u e d ( " S m a l lF a l l " ) ; y i e l dW a i t F o r S e c o n d s ( 0 . 2 2 5 ) ; i f( I n p u t . G e t B u t t o n ( " J u m p " ) ) { a n i m a t i o n . C r o s s F a d e ( " S t a yJ u m p i n g " ) ; }e l s e{ i f( G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . i s F a l l i n g= =f a l s e ) { a n i m a t i o n . C r o s s F a d e ( " S m a l lF a l l " ) ; }e l s e{ a n i m a t i o n . P l a y ( " F a l l " ) ; } } y i e l dW a i t F o r S e c o n d s ( 0 . 0 1 5 ) ; G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . c a n C o n t r o l=f a l s e ; } f u n c t i o nD i d L a n d ( ){ i f( G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . i s F a l l i n g= =f a l s e ) { i f( a n i m a t i o n . I s P l a y i n g ( " S t a yJ u m p i n g " ) ) { a n i m a t i o n . P l a y ( " L a n d i n g " ) ; }e l s e{ a n i m a t i o n . C r o s s F a d e ( " L a n d e d " ) ; } y i e l dW a i t F o r S e c o n d s ( 0 . 1 5 ) ; G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . c a n C o n t r o l=t r u e ; }e l s e{ a n i m a t i o n . C r o s s F a d e ( " F l o o rI m p a c t " ) ; a n i m a t i o n . C r o s s F a d e ( " G e tU p " ) ; G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . i s F a l l i n g=f a l s e ; y i e l dW a i t F o r S e c o n d s ( 0 . 1 5 ) ; G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . c a n C o n t r o l=t r u e ; } }
?

Sobre a funo DidJump(): Esta funo ser utilizada pelo script PlayerController que criaremos logo depois. Basicamente, essa funo checa o estado da animao atual e executa a animao desejada assim que o script PlayerController decidir que o momento certo para estas animaes serem executadas. Sobre a funo DidLand(): Sempre que o script PlayerController detectar que o personagem pousou de um salto ou caiu em algum lugar, ele ir enviar uma mensagem para este script dizendo que o personagem acabou de atingir o solo e a animao de pouso deve ser tocada. Ao salvar seu script, neste ponto a Unity vai estar se indagando o que viria a ser o componente PlayerController. Este um script que ainda no criamos, por isso seu cdigo ainda no funciona, mas agora precisamos definir a funo Update() e ento podemos partir para o script que a Unity acusa estar faltando. 6.7 Editando a funo Update Na funo Update() ns continuamos o trabalho com as animaes, mas com a diferena de que no poder ser usada nenhuma funo Yield aqui: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 f u n c t i o nU p d a t e ( ){ i f( G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . G e t H a n g T i m e ( )<h a n g T i m e U n t i l F a l l i n g A n i m a t i o n ) { i f( G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . h e a d s U p= =f a l s e ) { i f( G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . I s M o v i n g ( ) ) { i f( I n p u t . G e t B u t t o n ( " A c t i o nA " ) ) { i f( G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . i s S n e a k i n g! =t r u e ) { a n i m a t i o n . C r o s s F a d e( " R u n " ) ; } e l s e { a n i m a t i o n . C r o s s F a d e ( " S n e a k " ) ; } } e l s e
?

pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page=

10/23

14/09/13

Viso Geral do Unity

2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7

} e l s e { i f( ! G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . i s S n e a k i n g= =t r u e ) a n i m a t i o n . C r o s s F a d e ( " L a n d e d " ) ; }

} e l s e { G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . i s S n e a k i n g=t r u e ; i f( G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . I s M o v i n g ( )= =f a l s e ) { a n i m a t i o n . C r o s s F a d e ( " G e tD o w n " , 0 . 5 ) ; } e l s e { a n i m a t i o n . C r o s s F a d e ( " S n e a k " , 0 . 5 ) ; } }

} } e l s e { i f( G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . h e a d s U p= =t r u e ) { a n i m a t i o n . C r o s s F a d e ( " G e tD o w n " ) ; G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . i s S n e a k i n g=t r u e ; } e l s e { i f( G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . i s S n e a k i n g= =f a l s e ) a n i m a t i o n . C r o s s F a d e ( " I d l e " ) ; } } i f( ! G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . I s M o v i n g ( ) ) { i f( I n p u t . G e t A x i s ( " V e r t i c a l " )< =0 . 2 5 ) { a n i m a t i o n . C r o s s F a d e ( " G e tD o w n " ) ; G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . i s S n e a k i n g=t r u e ; } e l s e { G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . i s S n e a k i n g=f a l s e ; } }

i f ( I n p u t . G e t A x i s ( " V e r t i c a l " )< =0 . 2 5 ) { a n i m a t i o n . C r o s s F a d e ( " S n e a k " ) ; G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . i s S n e a k i n g=t r u e ; } e l s e { a n i m a t i o n . C r o s s F a d e( " W a l k " ) ; G e t C o m p o n e n t ( P l a y e r C o n t r o l l e r ) . i s S n e a k i n g=f a l s e ; }

E assim nossas animaes esto prontas para desempenhar seu papel no game. Nessa funo existe contedo suficiente para um bom tempo de estudo. Deixando um pouco de lado a mecnica de nossas animaes, vamos dar uma olhada mais de perto em o que exatamente estas linhas esto fazendo: Antes de tudo, ns verificamos se o personagem no est caindo tempo suficiente para impedir sua movimentao terrena, e se caso no o estiver, seguimos em frente com as animaes, caso contrrio significa que precisamos tocar a animao de pouso pois muito em breve ele ir tocar o solo. Verificamos isso atravs da funo GetHangTime() que escreveremos no futuro. Em seguida, verificamos se o personagem no colidiu com algum obstculo que o force se manter agachado atravs da varivel headsUp. A implementao desta funcionalidade pode se tornar complexa pois envolve alguns conceitos que talvez no sejam cobertos aqui, por isso talvez seja matria de um outro tutorial no futuro, quem sabe. Se o personagem estiver ciente de que h algo sobre sua cabea que o impede de levantar, ele ser obrigado se mover agachado, caso contrrio se o boto de corrida estiver pressionado ele poder correr, caso contrrio eles apenas ir andar normalmente. Assim ns tocamos a animao de correr ou andar ou engatinhar somente se o personagem est mesmo se movendo, julgando isso atravs da funo IsMoving() que ainda no foi escrita. Note que as teclas virtuais do meu projeto tem nomes prprios ao invs do padro criado pela Unity.

pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page=

11/23

14/09/13

Viso Geral do Unity

Se voc precisar editar suas teclas virtuais, v at Edit > Project Settings > Input.

6.8 PlayerController
Partiremos agora para o lado interativo que controla nossas animaes com o script PlayerController. V at o menu Assets e crie mais um JavaScript, renomeio para PlayerController, adicione-o como componente do seu personagem, aplique as mudanas ao Prefab e estamos prontos para programar. Novamente, comeamos com a declarao de variveis: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 v a rm o v e m e n t:P l a t f o r m e r C o n t r o l l e r M o v e m e n t ; v a rj u m p:P l a t f o r m e r C o n t r o l l e r J u m p i n g ; p r i v a t ev a rc o n t r o l l e r:C h a r a c t e r C o n t r o l l e r ; v a rc a n C o n t r o l=t r u e ; v a rs p a w n P o i n t:T r a n s f o r m ; v a rf l o o r H i t F X:A u d i o C l i p ; @ S y s t e m . N o n S e r i a l i z e d v a ri s S n e a k i n g=f a l s e ; @ S y s t e m . N o n S e r i a l i z e d v a ri s F a l l i n g=f a l s e ; @ S y s t e m . N o n S e r i a l i z e d v a rh e a d s U p=f a l s e ;
?

As variveis so usadas para: movement: Usaremos esta varivel como identificador para a classe que determina os movimentos do personagem. jump: Usaremos esta varivel como identificador para a classe que controla toda mecnica do movimento de pulo do personagem. controller: criamos aqui uma instncia do Builtin Controller Component que deve ser adicionado ao personagem. Voc pode adicionar a linha @script RequireComponent(CharacterController) ao fim de seu script e assim que ele for adicionado um objeto, o componente requerido tambm ser adicionado. canControl: Usaremos esta varivel para permitir ou no que o personagem possa ser controlado pelo jogador. Isso muito til para evitar que o jogador consigo executar movimentos muito irreais como por exemplo, saltar para a esquerda e de repente ainda no ar virar e comear a cair para a direita. tambm muito til para a criao de cut-scenes. spawnPoint: O conceito de Spawn Point interessante. Quando seu personagem morrer, entrar em alguma passagem, tnel, portas, etc, esse conceito extremamente til para facilitar a sua vida na hora de tele-portar um personagem para o local de destino. Esta varivel nada mais do que uma coordenada qualquer em seu espao 3D para onde o personagem pode ser movido. floorHitFX: J criamos uma varivel de mesmo nome em nosso primeiro script. Ela faz referncia ao clipe de som que usaremos aqui para ser usado como efeito de quando o personagem atinge o cho de maneira brusca. No se pode esquecer de assinar um Audio Clip da sua lista de Assets. Se voc no tiver nenhum udio mo, pode baixar alguns de sites frees pela web ou pode apenas ignorar esta questo do tutorial. isSneaking: Esta varivel se torna verdadeira todas as vezes em que um objeto que faz parte da layer escolhida se sobrepem sobre a cabea do personagem em determinada altura que o impea de se manter de p. Infelizmente os clculos usados para fazer o personagem entender que precisa se manter agachado so um tanto fora do foco e fazem parte de outros scripts que detectam colises e raycasts, por isso pode complicar o entendimento e desviar a ateno, ento deixaremos este tpico para um outro tutorial. isFalling: Esta varivel deve se tornar verdadeira todas as vezes em que o personagem estiver caindo de uma altura exagerada ou saltar de forma descontrolada, indicando que ele sofrer uma queda dolorosa ao invs de um pouso comum. Esta funcionalidade utiliza os mesmos princpios bsicos que isSneaking, mas apenas uma regra simples dentro do prprio loop Update() que executa um raycast em direo ao solo e se a altura for muita, o personagem sofrer uma queda ao atingir o solo. headsUp: Esta varivel deve se tornar verdadeira todas as vezes que o raycast implementado por outro script na cabea do personagem indicar que existe um objeto muito prximo que o impede se manter de p. Faz parte do sistema que identifica se ele est agachado ou no. Esta varivel usada como um gatilho que fora o personagem a se abaixar mesmo contra a vontade do jogador enquanto ele no se afastar do obstculo que o impede de se manter de p.

6.9 Classes Auxiliares


pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page= 12/23

14/09/13

Viso Geral do Unity

Com nossas variveis bem definidas, podemos seguir em frente com a implementao de nossas classes que auxiliaro na programao de toda a movimentao de nosso personagem: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 c l a s sP l a t f o r m e r C o n t r o l l e r M o v e m e n t { v a rw a l k S p e e d=3 . 0 ; v a rr u n S p e e d=1 0 . 0 ; v a ri n A i r C o n t r o l A c c e l e r a t i o n=1 . 0 ; v a rg r a v i t y=6 0 . 0 ; v a rm a x F a l l S p e e d=2 0 . 0 ; v a rs p e e d S m o o t h i n g=5 . 0 ; v a rr o t a t i o n S m o o t h i n g=5 . 0 ; @ S y s t e m . N o n S e r i a l i z e d v a rd i r e c t i o n=V e c t o r 3 . z e r o ; @ S y s t e m . N o n S e r i a l i z e d v a rv e r t i c a l S p e e d=0 . 0 ; @ S y s t e m . N o n S e r i a l i z e d v a rs p e e d=0 . 0 ; @ S y s t e m . N o n S e r i a l i z e d v a ri s M o v i n g=f a l s e ; @ S y s t e m . N o n S e r i a l i z e d v a rc o l l i s i o n F l a g s:C o l l i s i o n F l a g s ; @ S y s t e m . N o n S e r i a l i z e d v a rv e l o c i t y:V e c t o r 3 ; @ S y s t e m . N o n S e r i a l i z e d v a ri n A i r V e l o c i t y=V e c t o r 3 . z e r o ; @ S y s t e m . N o n S e r i a l i z e d v a rh a n g T i m e=0 . 0 ; v a rs n e a k C o n t r o l l e r H e i g h t:f l o a t=0 . 9 5 ; v a rs n e a k C o n t r o l l e r C e n t e r:V e c t o r 3=V e c t o r 3 ( 0 , 0 . 5 , 0 ) ;
?

c l a s sP l a t f o r m e r C o n t r o l l e r J u m p i n g { v a re n a b l e d=t r u e ; v a rh e i g h t=1 . 0 ; v a re x t r a H e i g h t=4 . 1 ; @ S y s t e m . N o n S e r i a l i z e d v a rr e p e a t T i m e=0 . 0 5 ; @ S y s t e m . N o n S e r i a l i z e d v a rt i m e o u t=0 . 1 5 ; @ S y s t e m . N o n S e r i a l i z e d v a rj u m p i n g=f a l s e ; @ S y s t e m . N o n S e r i a l i z e d v a rr e a c h e d A p e x=f a l s e ; @ S y s t e m . N o n S e r i a l i z e d v a rl a s t B u t t o n T i m e=1 0 . 0 ; @ S y s t e m . N o n S e r i a l i z e d v a rl a s t T i m e=1 . 0 ; @ S y s t e m . N o n S e r i a l i z e d v a rl a s t S t a r t H e i g h t=0 . 0 ;

Sobre nossas classes: Ao salvar seu script, voc pode ver que todas as variveis expostas das classes aparecem de maneira elegante e organizada no Inspector. No existem mais tantas dvidas sobre a funcionalidade das animaes, ento no h necessidade de informao redundante. O que estas iro fazer simplesmente pegar as informaes que o player insere atravs de valores seja em um gamepad ou teclado e implementar a interatividade, mandando mensagens nos momentos certos para que as animaes sigam a lgica definida pela interatividade proposta. Neste momento em diante a questo de jogabilidade vai se tornando cada vez mais presente e voc se ver por horas e horas aprimorando a movimentao e Gameplay de seu personagem. Em uma situao assim com tantas variveis corelacionadas sempre bom utilizar uma classe para tornar o trabalho menos doloroso.
pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page= 13/23

14/09/13

Viso Geral do Unity

Com nossas classes definidas, vamos em frente em trabalhar com o contedo oferecido por elas: 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 7 0 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 f u n c t i o nA w a k e ( ) { m o v e m e n t . d i r e c t i o n=t r a n s f o r m . T r a n s f o r m D i r e c t i o n ( V e c t o r 3 . f o r w a r d ) ; c o n t r o l l e r=G e t C o m p o n e n t ( C h a r a c t e r C o n t r o l l e r ) ; S p a w n ( ) ; } f u n c t i o nF i x e d U p d a t e ( ) { t r a n s f o r m . p o s i t i o n . z=0 ; } f u n c t i o nU p d a t e ( ) { i f( i s D y i n g! =t r u e ) { i f( I n p u t . G e t B u t t o n D o w n( " J u m p " )& &c a n C o n t r o l ) { j u m p . l a s t B u t t o n T i m e=T i m e . t i m e ; } U p d a t e S m o o t h e d M o v e m e n t D i r e c t i o n ( ) ; A p p l y G r a v i t y ( ) ; A p p l y J u m p i n g ( ) ;
?

l a s t P o s i t i o n=t r a n s f o r m . p o s i t i o n ; v a rc u r r e n t M o v e m e n t O f f s e t=m o v e m e n t . d i r e c t i o n*m o v e m e n t . s p e e d+V e c t o r 3( 0 ,m o v e m e n t . v e r t i c a c u r r e n t M o v e m e n t O f f s e t* =T i m e . d e l t a T i m e ; m o v e m e n t . c o l l i s i o n F l a g s=c o n t r o l l e r . M o v e( c u r r e n t M o v e m e n t O f f s e t ) ; m o v e m e n t . v e l o c i t y=( t r a n s f o r m . p o s i t i o n-l a s t P o s i t i o n )/T i m e . d e l t a T i m e ;

i f( m o v e m e n t . d i r e c t i o n . s q r M a g n i t u d e>0 . 0 1 ) t r a n s f o r m . r o t a t i o n=Q u a t e r n i o n . S l e r p( t r a n s f o r m . r o t a t i o n ,Q u a t e r n i o n . L o o k R o t a t i o n( m o v e m e

i f( c o n t r o l l e r . i s G r o u n d e d ) { m o v e m e n t . i n A i r V e l o c i t y=V e c t o r 3 . z e r o ; i f( j u m p . j u m p i n g ) { j u m p . j u m p i n g=f a l s e ; S e n d M e s s a g e( " D i d L a n d " ,S e n d M e s s a g e O p t i o n s . D o n t R e q u i r e R e c e i v e r ) ; v a rj u m p M o v e D i r e c t i o n=m o v e m e n t . d i r e c t i o n*m o v e m e n t . s p e e d+m o v e m e n t . i n A i r V e l o c i t y ; i f( j u m p M o v e D i r e c t i o n . s q r M a g n i t u d e>0 . 0 1 ) m o v e m e n t . d i r e c t i o n=j u m p M o v e D i r e c t i o n . n o r m a l i z e d ;

U p d a t e E f f e c t s( ) ; i f( i s S n e a k i n g= =t r u e ) { i f( c o n t r o l l e r . h e i g h t! =m o v e m e n t . s n e a k C o n t r o l l e r H e i g h t ){ c o n t r o l l e r . h e i g h t=m o v e m e n t . s n e i f( c o n t r o l l e r . c e n t e r! =m o v e m e n t . s n e a k C o n t r o l l e r C e n t e r ){ c o n t r o l l e r . c e n t e r=m o v e m e n t . s n e } e l s e { i f( h e a d s U p= =f a l s e ) { i f( c o n t r o l l e r . h e i g h t! =1 . 8 5 ){ c o n t r o l l e r . h e i g h t=1 . 8 5 ; } i f( c o n t r o l l e r . c e n t e r! =V e c t o r 3 ( 0 , 0 . 9 8 , 0 ) ){ c o n t r o l l e r . c e n t e r=V e c t o r 3 ( 0 , 0 . 9 8 , 0 ) ; } } } v a rh i t:R a y c a s t H i t ; v a rf l o o r R e c t=t r a n s f o r m . T r a n s f o r m D i r e c t i o n ( V e c t o r 3 ( 0 , 1 , 0 ) ) ; i f( P h y s i c s . R a y c a s t ( t r a n s f o r m . p o s i t i o n , f l o o r R e c t , h i t ) ) { i f( h i t . d i s t a n c e> =6 . 5 ) { i s F a l l i n g=t r u e ; } } i f( i s F a l l i n g= =t r u e ) { i f( I n p u t . G e t B u t t o n ( " J u m p " ) ) { i f( j u m p . e n a b l e d= =t r u e )
14/23

pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page=

14/09/13

Viso Geral do Unity

8 0 8 1 8 2 8 3 8 4 8 5 8 6 8 7 8 8 8 9 9 0 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 1 0 0 1 0 1 1 0 2 1 0 3 1 0 4 1 0 5 1 0 6 1 0 7 1 0 8 1 0 9 1 1 0 1 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 2 0 1 2 1 1 2 2 1 2 3 1 2 4 1 2 5 1 2 6 1 2 7 1 2 8 1 2 9 1 3 0 1 3 1 1 3 2 1 3 3 1 3 4 1 3 5 1 3 6 1 3 7 1 3 8 1 3 9 1 4 0 1 4 1 1 4 2 1 4 3 1 4 4 1 4 5 1 4 6 1 4 7 1 4 8 1 4 9 1 5 0 1 5 1 1 5 2 1 5 3 1 5 4 1 5 5 1 5 6 1 5 7 1 5 8 1 5 9 1 6 0

a n i m a t i o n . S t o p ( " F a l l " ) ; a n i m a t i o n . C r o s s F a d e ( " S t a yJ u m p i n g " ) ; i s F a l l i n g=f a l s e ;

f u n c t i o nU p d a t e S m o o t h e d M o v e m e n t D i r e c t i o n ( ) { v a rh=I n p u t . G e t A x i s R a w( " H o r i z o n t a l " ) ; i f( ! c a n C o n t r o l ) h=0 . 0 ; m o v e m e n t . i s M o v i n g=M a t h f . A b s( h )>0 . 1 ; i f( m o v e m e n t . i s M o v i n g ) m o v e m e n t . d i r e c t i o n=V e c t o r 3( h ,0 ,0 ) ; i f( c o n t r o l l e r . i s G r o u n d e d ) { v a rc u r S m o o t h=m o v e m e n t . s p e e d S m o o t h i n g*T i m e . d e l t a T i m e ; v a rt a r g e t S p e e d=M a t h f . M i n( M a t h f . A b s ( h ) ,1 . 0 ) ; i f( i s S n e a k i n g= =f a l s e& &h e a d s U p= =f a l s e ) { i f( I n p u t . G e t B u t t o n( " A c t i o nA " )& &c a n C o n t r o l ) { t a r g e t S p e e d* =m o v e m e n t . r u n S p e e d ; } e l s e { t a r g e t S p e e d* =m o v e m e n t . w a l k S p e e d ; } } e l s e { t a r g e t S p e e d* =m o v e m e n t . w a l k S p e e d ; } m o v e m e n t . s p e e d=M a t h f . L e r p( m o v e m e n t . s p e e d ,t a r g e t S p e e d ,c u r S m o o t h ) ; m o v e m e n t . h a n g T i m e=0 . 0 ;

} e l s e { m o v e m e n t . h a n g T i m e+ =T i m e . d e l t a T i m e ; i f( m o v e m e n t . i s M o v i n g ) m o v e m e n t . i n A i r V e l o c i t y+ =V e c t o r 3( M a t h f . S i g n ( h ) ,0 ,0 )*T i m e . d e l t a T i m e*m o v e m e n t . i n A i r C }

f u n c t i o nS p a w n ( ) { m o v e m e n t . v e r t i c a l S p e e d=0 . 0 ; m o v e m e n t . s p e e d=0 . 0 ; i f( r e s p a w n P o i n t! =n u l l ) { t r a n s f o r m . p o s i t i o n=r e s p a w n P o i n t . p o s i t i o n ; } } f u n c t i o nA p p l y G r a v i t y ( ) { v a rj u m p B u t t o n=I n p u t . G e t B u t t o n( " J u m p " ) ; i f( ! c a n C o n t r o l ) j u m p B u t t o n=f a l s e ; i f( j u m p . j u m p i n g& &! j u m p . r e a c h e d A p e x& &m o v e m e n t . v e r t i c a l S p e e d< =0 . 0 ) { j u m p . r e a c h e d A p e x=t r u e ; } S e n d M e s s a g e( " D i d J u m p R e a c h A p e x " ,S e n d M e s s a g e O p t i o n s . D o n t R e q u i r e R e c e i v e r ) ;

v a re x t r a P o w e r J u m p=j u m p . j u m p i n g& &m o v e m e n t . v e r t i c a l S p e e d>0 . 0& &j u m p B u t t o n& &t r a n s f o r m . p o s i t i f( e x t r a P o w e r J u m p ) r e t u r n ; e l s ei f( c o n t r o l l e r . i s G r o u n d e d ) m o v e m e n t . v e r t i c a l S p e e d=m o v e m e n t . g r a v i t y*T i m e . d e l t a T i m e ; e l s e m o v e m e n t . v e r t i c a l S p e e d=m o v e m e n t . g r a v i t y*T i m e . d e l t a T i m e ;
15/23

pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page=

14/09/13

Viso Geral do Unity

1 6 1 1 6 2 1 6 3 1 6 4 1 6 5 1 6 6 1 6 7 1 6 8 1 6 9 1 7 0 1 7 1 1 7 2 1 7 3 1 7 4 1 7 5 1 7 6 1 7 7 1 7 8 1 7 9 1 8 0 1 8 1 1 8 2 1 8 3 1 8 4 1 8 5 1 8 6 1 8 7 1 8 8 1 8 9 1 9 0 1 9 1 1 9 2 1 9 3 1 9 4 1 9 5 1 9 6 1 9 7 1 9 8 1 9 9 2 0 0 2 0 1 2 0 2 2 0 3 2 0 4 2 0 5 2 0 6 2 0 7 2 0 8 2 0 9 2 1 0 2 1 1 2 1 2 2 1 3 2 1 4 2 1 5 2 1 6 2 1 7 2 1 8 2 1 9 2 2 0 2 2 1 2 2 2 2 2 3 2 2 4 2 2 5 2 2 6 2 2 7 2 2 8 2 2 9 2 3 0 2 3 1 2 3 2 2 3 3 2 3 4 2 3 5 2 3 6 2 3 7 2 3 8 2 3 9 2 4 0 2 4 1

m o v e m e n t . v e r t i c a l S p e e d=M a t h f . M a x( m o v e m e n t . v e r t i c a l S p e e d ,m o v e m e n t . m a x F a l l S p e e d ) ;

f u n c t i o nA p p l y J u m p i n g ( ) { i f( i s S n e a k i n g! =t r u e& &h e a d s U p! =t r u e ) { i f( j u m p . l a s t T i m e+j u m p . r e p e a t T i m e*1 5>T i m e . t i m e ) r e t u r n ; i f( c o n t r o l l e r . i s G r o u n d e d ) { i f( j u m p . e n a b l e d& &T i m e . t i m e<j u m p . l a s t B u t t o n T i m e+j u m p . t i m e o u t ) { m o v e m e n t . v e r t i c a l S p e e d=C a l c u l a t e J u m p V e r t i c a l S p e e d( j u m p . h e i g h t ) ; S e n d M e s s a g e( " D i d J u m p " ,S e n d M e s s a g e O p t i o n s . D o n t R e q u i r e R e c e i v e r ) ; } }

f u n c t i o nC a l c u l a t e J u m p V e r t i c a l S p e e d ( t a r g e t J u m p H e i g h t:f l o a t ) { r e t u r nM a t h f . S q r t( 2*t a r g e t J u m p H e i g h t*m o v e m e n t . g r a v i t y ) ; } f u n c t i o nD i d J u m p ( ) { j u m p . j u m p i n g=t r u e ; j u m p . r e a c h e d A p e x=f a l s e ; j u m p . l a s t T i m e=T i m e . t i m e ; j u m p . l a s t S t a r t H e i g h t=t r a n s f o r m . p o s i t i o n . y ; j u m p . l a s t B u t t o n T i m e=1 0 ; c a n C o n t r o l=t r u e ; } f u n c t i o nG e t S p e e d ( ) { r e t u r nm o v e m e n t . s p e e d ; } f u n c t i o nG e t V e l o c i t y ( ) { r e t u r nm o v e m e n t . v e l o c i t y ; } f u n c t i o nI s M o v i n g ( ) { r e t u r nm o v e m e n t . i s M o v i n g ; } f u n c t i o nI s J u m p i n g ( ) { r e t u r nj u m p . j u m p i n g ; } f u n c t i o nI s T o u c h i n g C e i l i n g ( ) { r e t u r n( m o v e m e n t . c o l l i s i o n F l a g s&C o l l i s i o n F l a g s . C o l l i d e d A b o v e )! =0 ; } f u n c t i o nG e t D i r e c t i o n ( ) { r e t u r nm o v e m e n t . d i r e c t i o n ; } f u n c t i o nG e t H a n g T i m e ( ) { r e t u r nm o v e m e n t . h a n g T i m e ; } f u n c t i o nR e s e t ( ) { g a m e O b j e c t . t a g=" P l a y e r " ; } f u n c t i o nS e t C o n t r o l l a b l e ( c o n t r o l l a b l e:b o o l e a n ) { c a n C o n t r o l=c o n t r o l l a b l e ; }
16/23

pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page=

14/09/13

Viso Geral do Unity

E assim temos ambos os scripts que controlam tanto as animaes quando a jogabilidade bsica do personagem como andar, correr, saltar, cair, agachar, se arrastar, etc. O script acima uma forma de fsica controlada e por isso, em certos momentos, envolve muita matemtica que pode ser muito confusa se voc no conhecer ao menos um pouco sobre fsica. Ler alguns livros sobre o assunto sempre muito til. A partir deste ponto, se tudo correu bem, seu personagem deve estar andando, correndo e saltando normalmente.

possvel que voc tenha talvez alguma dificuldade para executar o tutorial, se for o caso, provavelmente voc ainda precisa se ambientar melhor com a interface da Unity e conhecer mais a fundo seus conceitos antes de se arriscar em animar um personagem que nesse caso pode ser uma questo complexa. Se voc teve dificuldades em seguir este tutorial por no ser um passo-a-passo, normal, este tutorial focado em explicar conceitos ao invs de indicar exatamente como algo deve ser feito e por isso h muita coisa no explicada aqui que voc precisa pesquisar por si prprio. Bem, minha parte termina aqui, mas a sua est apenas comeando, se voc estiver mesmo disposto a por em prtica os cdigos exemplificados aqui, no tente apenas copiar e colar, isso definitivamente no ir funcionar. Estude com ateno, procure realmente entender o que est acontecendo em cada linha e no muito alm voc se ver desenvolvendo funes ainda mais poderosas e se tornando cada vez mais seguro e experiente para tentar contedo cada vez mais avanado. Por exemplo, tente implementar voc mesmo as funes que foram o personagem a se manter agachado e crie objetos no cenrio para testar a funcionalidade e ir aos poucos aprimorando sua funo. Garanto que voc vai se divertir tanto que certa hora voc se ver mais jogando seu game do que trabalhando nele! Rsrsrs. Voc pode tambm criar obstculos que explodam e gerem dano no seu personagem, criar uma ragdoll, etc. Crie um script que mantenha o estado do seu personagem, como por exemplo, vidas, barra de energia, etc. Voc pode criar efeitos com partculas e apliclos ao seu spawnPoint indicando visualmente que o personagem aparece naquele ponto, pode criar tambm respawnPoints onde o personagem continuar a partir dal se caso ele morrer, etc.

Enfim, divirta-se com a Unity enquanto aprende e ao mesmo tempo produz. Acredito que isto seja o segredo de qualquer coisa que exige dedicao, faa por diverso e no por obrigao. Boa sorte!

Comentrios (26) Bruno Torres - Parabns! Muito Bom seu Tutorial (Aula de Unity) hehe

Adicionar novo
| 189.31.195.xxx | 07/11/2011 02:15:47

Espero nessas frias de final de ano, poder colocar em prticas algumas coisas como um personagem animado e uma UI simples. Ah, uma coisa seu personagem foi "rigado" com bones tipo do 3ds max ou biped? Posso usar biped ou obrigatoriamente tem quer ser os bones? Valeu. Abrao!
pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page= 17/23

14/09/13

Viso Geral do Unity

Responder

Citar | 12/11/2011 10:45:42

Bruno Xavier Obrigado Torres.

Quanto ao rig, at o momento o Unity suporta somente bones, no suporta automaticamente rigs mais complexos. Est em endamento um sistema semelhante ao Euphoria do GTA IV pela Unity Tech, no caso utilizando Inverse Kinematics, mas por enquanto apenas bones mesmo. Abrao.

Responder

Citar | 189.11.44.xxx | 12/11/2011 12:44:49

Bruno Torres - Valeu Hum.. Valeu pela resposta, tava modelando um personagem pra testes ento farei com bones mesmo hehe Muito Legal esta notcia nem fazia idia ^^ Muito Obrigado pela resposta.. Aguardo mais tutoriais de Unity se possvel.. Abrao!

Responder

Citar | 201.52.42.xxx | 23/11/2011 05:10:58

Annimo - Developer

Essa ferramenta timo, pena que para fazer para Android paga..enfim anos luz em frente do bug"XNA".. belo tutorial..

Responder

Citar | 23/11/2011 11:04:44

Bruno Crivelari Sanches

XNA uma API e uma coleo de ferramentas para facilitar desenvolvimento de jogos, no uma ferramenta de autoria como o Unity. No tem sentido comparar as duas, so duas ferramentas totalmente diferentes e que visam pblicos diferentes. O Unity mais comparvel com UDK, CryEngine, etc. Agora eu acho o preo da verso Android insignificante perto dos outros custos de se fazer um jogo. muito menos que um ms de salrio de um desenvolvedor e voc vai economizar muito mais que um ms com uma ferramenta dessas dependendo do projeto. T+

Responder

Citar | 200.188.212.xxx | 02/12/2011 17:00:21

Mateus Pires - Preos Voc tem o valor para comprar a licena para o Android?

pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page=

18/23

14/09/13

Viso Geral do Unity

Responder

Citar | 02/12/2011 17:04:27

Bruno Crivelari Sanches Basta acessar o site e ir na loja: https://store.unity3d.com/shop/ Pelo o que estou vendo, verso Android USS400 T+

Responder

Citar | 186.228.7.xxx | 16/04/2012 08:56:55

Nick

cara tenho uma pergunta! como fazer uma animao completa? tipo quero que ela tenha todos os movimentos e quero que ela faa coisas sobre humanas tipo voar super fora, super poderes pegar objetos no cho! saco?

Responder

Citar | 16/04/2012 13:31:49

Bruno Crivelari Sanches Voc quer fazer animao ou implementar isso?

Se quer que o personagem do seu jogo faa essas aes, alm das animaes voc tem que programar esses movimentos.

Responder

Citar

Annimo
| 189.107.12.xxx | 24/04/2012 15:30:12

onde baixa ?

Responder

Citar | 24/04/2012 15:37:48

Bruno Crivelari Sanches http://www.unity3d.com T+

Responder

Citar | 24/04/2012 15:37:55

Vincius Godoy de Mendona http://unity3d.com/unity/download/

Responder

Citar

pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page=

19/23

14/09/13

Viso Geral do Unity

dalton - triggers

| 201.91.191.xxx | 20/08/2012 13:24:43

Bom dia Bruno. Uma dvida a respeito de triggers. Eu quero fazer com que um objeto caia prximo ao meu personagem. para isso eu teria que fazer dois triggers? Um faria o objeto cair quando o personagem passar pelo trigger, isso? Abo e parabns pelo blog

Responder

Citar | 01/10/2012 12:46:36

Bruno Xavier Ol dalton, desculpe a demora na resposta.

Eu no entendi bem sua dvida. programar gameplay em Unity pode ser feito de vrias e vrias maneiras diferentes. Eu faria o seguinte: Deixaria o objeto em modo kinematic, no RigidBody. Criaria um trigger collider onde o personagem deve passar como vc mesmo mencionou. Assim que o trigger ativado, enviaria uma mensagem para um script no objeto que desativaria o modo kinematic do RigidBody e ele cairia encima ou proximo do personagem. Abrao.

Responder

Citar | 201.34.130.xxx | 09/10/2012 02:48:03

Gustavo Antunes de Bitencourt - Unity3D com Realidade Aumentada Ola pessoal. Bruno, parabns pelo post.

Voc j implementou um jogo com Unity3D com a tecnologia de Realidade Aumentada? Sabes me informar de que forma melhor eu trabalhar com esse combo(RA + Unity3D) ? Desde j, muito obrigado. Abrao.

Responder

Citar | 14/12/2012 14:02:34

Bruno Xavier

Gustavo, mil desculpas pela resposta tooo atrasada; Eu preciso receber alguma forma de notificao nos posts pois eu no tenho como monitorar o site constantemente. Ento, sobre a sua pergunta: a maneira mais simples de se trabalhar com RA na Unity, em relao ao software, atravs de bibliotecas de terceiros que voc precisaria portar para a Unity voc mesmo provavelmente. Infelizmente eu no sou familar com essa area e nunca tive nenhum contato com essas bibliotecas, mas acredito que devem ser plugins .NET, apenas no sei se existe alguma de cdigo aberto. Boa sorte!

Responder

Citar | 201.35.214.xxx | 21/12/2012 01:27:50

Gustavo Antunes de Bitencourt Desculpas pela demora em dar o feedback tambm. Valeu pelas dicas e aproveitando para deixar aqui que est disponvel a lib de NYArtoolkit para Unity3D.
pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page=

20/23

14/09/13

Viso Geral do Unity

Valeu, abrao.

Responder

Citar | 201.6.248.xxx | 15/11/2012 18:12:21

Fanuel Marinho Ol Bruno, Parabns pelo seu post, muito interessante e bem elaborado. Gosto bastante da Unity3D. Pelo que estava lendo, vi que voc se formou na Full Sail University.

Voc no poderia fazer um post falando mais a respeito dos cursos que voc fez l , o que gostou e coisa e tal??

Abrao

Responder

Citar | 14/12/2012 14:27:09

Bruno Xavier Oi Fanuel. Eu posso te dar duas dicas: O que eu no gostei foi o preo rsrs...

E tambm o fato de que as pessoas por l no gostam muito de estrangeiros, por mais que tentem te convencer que sim. Meu ingls no dos melhores, mas ainda assim a instituio foi bastante compreensiva. Os professores so gente que praticamente se poderia pedir autografos, alm do conhecimento que eles passam e levam a SRIO, isso muito importante, uma das coisas mais valiosas que se pode obter l so os emails desses professores heheh. Existem muitos cursos, apesar de ser um pouco versado em programao eu estudei artes e game design ento eu sinceramente no tenho idia de como so os cursos de programao por l. Minha inteno era trabalhar no mercado de CGI, mas com o tempo as oportunidades que surgiram foram com games e como eu j fazia muitas modificaes nos softwares Autodesk, acabei pegando uns trabalhos envolvendo arte tecnica o que me obrigou a aprender programao mais convecional. No pude ficar na regio por muito tempo e quando voltei, decidi aplicar o que aprendi em jogos para estudios que publicam indie games pois eles aceitam com mais facilidade trabalhos remotos... Mas recomendo! Apenas o preo no agradvel; Fiz tambm alguns cursos especficos na Gnomon e tambm fora de srio. Por experincia, digo que as empresas brasileiras no iro dar muito valor a uma formao destes moldes, mas com as empresas de fora voc consegue muita ateno. Abrao.

Responder

Citar | 201.22.14.xxx | 28/05/2013 14:16:49

Rfagan Ol!

Uma dvida. Vejo que utiliza abusivamente os recursos de captura de componentes do GameObject dentro de seu update. Pelo que eu conheo de Unity, GetComponent reflection e, apesar de ser um recurso poderoso, muito caro. No seria mais interessante capturar as referncias aos componentes dentro do awake, ao invs de realizar diversas chamadas ao GetComponent?

pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page=

21/23

14/09/13

Viso Geral do Unity

Responder

Citar | 189.69.86.xxx | 28/05/2013 14:23:43

Bruno Xavier Ol Rafagan. Pois , esse texto na verdade de 2009.

Na poca no havia muita noo de optmizao em Unity inclusive por parte dos prprios desenvolvedores da engine. Hoje, como Unity cresceu demais e muita coisa foi modificada sim impraticvel usar GetComponent dentro de loops. Abrao.

Responder

Citar | 187.15.36.xxx | 30/05/2013 17:41:55

Hans - Cinematica Como fasso cinematica em jogos

Responder

Citar | 187.127.195.xxx | 03/07/2013 02:12:45

Joblackplay - directx qual e melhor para comea a desenvolver jogos directx ou unit? ou qual engine em e mais amigavel ?

Responder

Citar | 189.101.67.xxx | 03/07/2013 11:58:29

ViniGodoy

So coisas completamente diferentes. O DirectX um pipeline grfico, bruto, de baixo nvel. A Unity uma engine, cheia de features prontas e focada em facilidade e agilidade. Se voc quiser fazer uma engine, use DirectX. Se voc quer usar uma engine, v para a Unity.

Responder

Citar | 186.212.158.xxx | 04/07/2013 01:28:21

Carlos Ol Bruno!

Eu sou iniciante, e gostaria de saber se difcil fazer o personagem, tem que ser feito em software tipo 3dmax. Eu nunca usei esse tipo de software. Existe algum site que a pessoa consiga esses personagens prontos, ou voc recomenda antes de aprender a trabalhar com unit a mexer no 3dmax?

Responder

Citar | 189.11.154.xxx | 08/08/2013 18:04:07

Andreas - re: Respondendo a Pergunta Carlos!

Quando iniciamos nossa empresa tambem fizemos essa pergunta para nos mesmo... Depois de muito estudo chegamos a uma concluso! Decidimos trabalhar com o Blender! Existem muitos tutoriais e videos-aulas expalhados pela rede, o mesmo digo do Unity3D. Comeamos com base zero de conhecimento em Blender e quase zero em unity...
pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page= 22/23

14/09/13

Viso Geral do Unity

Eu aconselho primeiro da uma estudada no blender para comear a modelar os personagens e cenarios... e depois foca no Unity!O blender uma ferramenta de alto nivel e free...Ela esta juntinho com os melhores softwares de modelagem pagos como o 3dsMax, Maya, etcccs ! Essas duas ferramentas juntas so muito poderosas Valeu... E bom divertimento!

Responder

Citar

Escrever um comentrio
Your Contact Details:
Nom e: E-m ail: Website: no notificar
Grav atar enabled

Comentrio:
Ttulo: UBBCode:

-cor-

-tamanho-

Message:

Security

Por favor coloque o cdigo anti-spam que voc l na imagem.


ENVIAR Joomla components by Compojoom

pontov.com.br/site/index.php/unity/300-visao-geral-do-unity?tmpl=component&print=1&page=

23/23

You might also like