DANIEL FERREIRA     CRIAÇÃO + PESQUISA
Unity ferramenta

Unity

Unity é um engine e uma ferramenta de autoria multi-plataforma, mais popularmente utilizada em jogos. Está sendo empregada no desenvolvimento da nova versão do MissionMaker, que por sua vez também é um aplicativo para criação de jogos, parte do projeto Playing Beowulf. Trabalhei neste projeto no ano passado como parte da equipe de pesquisa e desenvolvimento no London Knowledge Lab.

Neste post faço uma breve introdução ao Unity e apresento alguns dos meus próprios experimentos com ele. [1]

Nota: posts sobre Playing Beowulf, MissionMaker 2 (em inglês) e minha pesquisa.

O Poder da Unity

Unity tem se tornado cada vez mais popular dentro da comunidade gamer e entre desenvolvedores em geral, pela sua boa performance, qualidade (principalmente nos gráficos e na simulação de física) e riqueza de funcionalidades.

Mas uma das suas maiores vantagens é o suporte a uma ampla variedade de plataformas – incluindo desktop, dispositivos móveis, consoles e web (embora o suporte na web tenha se tornado um pouco complicado ultimamente, como é explicado mais adiante neste post). Esta variedade permite não apenas um maior alcance dos projetos em Unity, quanto um fluxo de trabalho mais prático e objetivo para desenvolvedores.

Além disso, o lançamento do Unity 5.0 no início de 2015 incluiu uma versão gratuita e totalmente funcional (a “Personal Edition”), que pode ser usada por qualquer pessoa (ou empresa) com um lucro anual menor do que US$100,000 (dólares). Embora ainda seja cedo para dizer, esta decisão pode revolucionar a prática do desenvolvimento de jogos e software – ou ao menos criar um forte precedente -, ao tornar uma ferramenta de nível profissional disponível a quem possa se interessar, sem custo. [2]

Ferramenta de Autoria

Comparada a outros aplicativos similares, a ferramenta de autoria da Unity é relativamente intuitiva e acessível, e ao mesmo tempo poderosa e flexível. A programação do código em si (os scripts) pode ser feita tanto da maneira mais tradicional (digitando manualmente o código linha a linha) quanto através de uma interface visual. Por exemplo, é possível declarar variáveis em um script de forma que seus valores podem ser alterados através de sliders e campos de texto na interface gráfica do próprio Unity.

Unity 5: interface

Unity 5: graphical interface

Alguns desenvolvedores podem escolher usar menos scripting, e fazer a maior parte do trabalho arrastando e combinando objetos e elementos através da interface gráfica. Outros podem decidir focar na programação, e mesmo modificar certas funções de baixo nível do engine, como aquelas relacionadas à renderização ou à detecção de colisão entre objetos. [3]

Suporte na Web: é complicado

Uma das principais vantagens do Unity é o amplo suporte entre múltiplas plataformas. Isso permite que um mesmo projeto seja exportado para uma variedade de dispositivos e sistemas operacionais diferentes. Porém, recentemente o suporte na web se tornou mais complicado, e deve levar um tempo até que isso seja resolvido.

Unity nunca foi muito popular na web, pelo menos não tanto quanto o Flash já foi um dia. Os jogos que utilizam este plugin tendem a ser pesados e lentos para rodar, como se estivessem sempre forçando a máquina até o seu limite. De fato, o engine é otimizado para velocidade e performance a todo custo, fazendo um uso agressivo dos recursos computacionais. Isto é compreensível, afinal, a princípio o browser não é a melhor plataforma para rodar este tipo de conteúdo 3D, principalmente com as funcionalidades e a qualidade presentes no Unity.

Mas o maior problema para o Unity na web agora é o fato de que o plugin depende do NPAPI, uma tecnologia ultrapassada. O Google Chrome recentemente parou de dar suporte ao NPAPI, e outros browsers mais cedo ou mais tarde devem fazer o mesmo. A tecnologia mais recente e promissora para web é a WebGL, que o Unity suporta, porém de maneira limitada. Mesmo os criadores do Unity não recomendam iniciar novos projetos usando o seu plugin, ou mesmo que dependam demais da WebGL, pois a tecnologia ainda está em um estágio relativamente inicial de desenvolvimento. Deve levar algum tempo até ela ser capaz de atingir a mesma qualidade de performance do plugin próprio da Unity (leia mais sobre esta questão no site da Unity, aqui).

Jogos e “Não-Jogos”

O Unity sempre se promoveu principalmente como uma ferramenta para o desenvolvimento de jogos – no site a seção de demos se divide em duas categorias: Jogos e “Não-Jogos” (em inglês, “Non-Games“). Faz sentido, uma vez que, como mencionado antes, o engine foi construído tendo em vista velocidade e performance.

Porém, Unity é extremamente flexível e capaz de lidar com virtualmente qualquer tipo de projeto. Desde visualizações para arquitetura e produtos, simulações para engenharia e publicidade, até projetos educacionais e artísticos. Geralmente associado a aplicações 3D, ele também é capaz de lidar com projetos 2D, bem como combinações entre os dois.

Unity também não se limita a produções voltadas ao consumidor final, uma vez que ele também pode ser empregado na implementação de aplicativos e ferramentas independentes (este é o caso mencionado anteriormente, do MissionMaker 2).

Certamente há muitos motivos pelos quais um desenvolvedor pode preferir não empregar Unity em seu projeto, alguns dos quais eu menciono neste post. Mas a sua versatilidade significa que, independente do que precisa ser desenvolvido, o Unity geralmente estará entre as melhores opções para fazê-lo.


Experimentos Com Unity

Nesta seção tratarei sobre a minha experiência pessoal usando Unity para produzir alguns experimentos.

Como criativo, estou sempre experimentando novas ferramentas, linguagens e práticas criativas, tanto em meio digital quanto tradicional (embora eu tenha a tendência de focar mais nas mídias digitais). [4]

Esta prática também informa a minha pesquisa atual, que é sobre expressividade procedural. Eu investigo a prática da programação e a lógica dos algoritmos como uma linguagem, de maneira análoga a meios tradicionais como literatura e pintura. Isso envolve tanto os aspectos mais práticos das ferramentas, linguagens e paradigmas de programação, quanto elaborações mais teóricas relacionadas à compreensão do processo criativo do artista.

Embora as minhas habilidades como programador sejam limitadas, tive poucas dificuldades em trabalhar com o Unity. Levei menos de meia hora para ter um protótipo razoável rodando (por sinal, muito menos tempo do que levei para baixar e instalar o Unity no meu computador). Fiz um “jogo” no qual cubos caem do alto em posições aleatórias, e o jogador controla uma caixa (usando o teclado) para “pegar” eles. Eventualmente me deparei com um problema relacionado à simulação de física (objetos “dormindo”…), mas como eu queria experimentar outras coisas decidi seguir em frente.

Para o meu próximo experimento eu decidi fazer um protótipo de algo similar ao jogo clássico da cobrinha (ou Snake), mas em 3D. Embora não seja de forma alguma uma tarefa difícil, eu sabia que exigiria pelo menos alguns conceitos, como movimento de câmera, vetores 3D e criação e manipulação dinâmica de objetos. Em menos de uma hora eu já tinha implementado exatamente o que eu tinha em mente, e mais (consegui até executar o protótipo em um dispositivo Android e adaptar os controles para usar o acelerômetro). [5]

Experiments: snake prototype

Experiments: snake prototype

Acabei me enrolando de novo no código, à medida que tentava incluir mais funcionalidades no protótipo (tive problemas relacionados a classes e escopo de variáveis). Mas isso diz mais sobre minhas limitações como programador do que sobre o Unity.

Update 2016/07/23: mais imagens aqui.


Links

– Baixe o Unity aqui.
– Publicação em Android exige este SDK, bem como o JDK do Java.


  1. Neste post mantenho o termo em inglês “engine” no masculino em referência a esta camada fundamental de software (quando me refiro à ferramenta Unity, utilizo o feminino). Este termo é algumas vezes traduzido em português como “motor” (wikipedia). []
  2. Desenvolvedores ainda precisarão adquirir licenças para publicar em alguns lugares, como no Google Play e na Apple App Store. Mas a publicação de um projeto como um aplicativo independente, ou na web, é gratuita (uma “splash screen” da Unity aparece ao carregar, porém a maioria dos desenvolvedores utilizando esta versão não parece se importar com isso). []
  3. O Flash tem uma abordagem híbrida similar, porém o Unity é muito mais robusto e estável (além do mais, não parece que o Flash existirá por muito mais tempo). []
  4. Minhas criações em meio digital podem ser acessadas neste site nas categorias: generativo, jogo e instalação (outras categorias podem ser acessadas usando o menu no topo à direita – item criação). []
  5. Em 2009 eu fiz um remake de Snake no Flash, chamado Nibballs. Porém, neste projeto em Unity o meu plano é ter uma mecânica diferente desta. []

See more blog.

  

Não há comentários »

Nenhum comentário.

Feed RSS para os comentários deste post. Trackbacks

Deixe um comentário