(Parte 1 de 5)

Tutorial: Desenvolvimento de Jogos com Unity 3D

Erick Baptista Passos epassos@ic.uff.br

José Ricardo da Silva Jr. josericardo.jr@gmail.com

Fernando Emiliano Cardoso Ribeiro one.fernando@gmail.com

Pedro Thiago Mourão pedrothiago@hotmail.com

VIII Brazilian Symposium on Games and Digital EntertainmentRio de Janeiro, RJ – Brazil, October, 8th-10th 2009

Apresentação

Esse tutorial é apresentado como uma breve introdução ao desenvolvimento de jogos com o motor Unity3D. Explicações muito detalhadas, mesmo que cobrindo apenas parte das funcionalidades existentes, ocupariam bem mais que as três dezenas de páginas disponíveis para este tutorial. Dessa forma, recomendamos o leitor interessado a buscar mais informações na abrangente e excelente documentação da ferramenta, disponível tanto localmente, ao se realizar a sua instalação, quanto online através do site http://www.unity3d.com/support.

Também por questões de espaço, não foi incluída uma introdução geral ao desenvolvimento de jogos. Espera‐se que o leitor possua alguma familiaridade com os conceitos e ferramentas relacionados ao assunto tais como renderização em tempo‐real, modelagem e animação 3D, texturas e Shaders. Também espera‐se que o leitor possua noções de programação, preferencialmente com alguma linguagem orientada a objetos.

O conteúdo do texto está organizado em forma crescente de complexidade, de forma a facilitar a leitura. Entretanto, as seções apresentadas também podem ser lidas de forma independente.

A imagem da capa foi cedida do projeto França Antártica, de cuja equipe de desenvolvimento fazem parte alguns dos autores. O jogo França Antártica está sendo desenvolvido através da Unity3D e é um projeto financiado pela Secretaria de Cultura do Estado do Rio de Janeiro.

Por fim, informa‐se que algumas das figuras e exemplos apresentados foram adaptados do manual da ferramenta, de tutoriais online (http://w.unity3d.com/resources), bem como de discussões disponíveis no forum comunitário de desenvolvedores Unity (http://forum.unity3d.com). Também recomendamos o leitor que explore essas referências para um maior aprofundamento.

VIII Brazilian Symposium on Games and Digital EntertainmentRio de Janeiro, RJ – Brazil, October, 8th-10th 2009

Guia de leitura

1 ‐ Introdução Breve apresentação dos módulos da Unity3D e detalhamento da interface do editor de cenas. 2 ‐ Criação e Manipulação de Game Objects

Explicação do modelo de objetos da Unity3D e as formas básicas de criação, composição e alteração dos mesmos.

3 ‐ Materiais e Shaders

Breve introdução à linguagem de especificação de Shaders da Unity3D: ShaderLab. São demonstrados exemplos para pipeline de função fixa, bem como Shaders programáveis.

4 ‐ Sistema de Física Introdução aos componentes relacionados ao subsistema PhysX de simulação física. 5 ‐ Scripting

Apresentação, através de exemplos, dos principais conceitos para a programação de scripts com a Unity3D.

6 ‐ Conclusão Considerações finais dos autores. Bibliografia Leituras recomendadas para aqueles interessados em um maior aprofundamento.

VIII Brazilian Symposium on Games and Digital EntertainmentRio de Janeiro, RJ – Brazil, October, 8th-10th 2009

1 ‐ Introdução

O desenvolvimento de jogos 3D é uma atividade ao mesmo tempo gratificante e desafiadora. Diversas habilidades, de diferentes áreas do conhecimento, são necessárias nesse processo. O uso de ferramentas para auxiliar nas tarefas repetitivas é fundamental nesse tipo de atividade, e ao longo do tempo, um tipo especial de ferramenta, conhecido como motor de jogos (game engine) foi evoluindo de maneira paralela aos próprios jogos, ao ponto que se tornaram produtos valiosos e de certa forma populares.

Alguns módulos e funcionalidades auxiliares são condições necessárias para que uma ferramenta seja considerada um motor de jogos completo. Em especial, um sistema de renderização 3D com suporte a Shaders programáveis e um sistema de simulação física são fundamentais. Uma boa arquitetura para a programação de scripts, um editor de cenas integrado, e a capacidade de se importar diretamente modelos 3d, imagens e efeitos de áudio produzidos em ferramentas externas, são as características existentes nos motores de jogos. Além disso, é desejável que os jogos desenvolvidos possam ser distribuídos em múltiplas plataformas como PC, consoles ou mesmo dispositivos móveis.

A Unity3D abstrai do desenvolvedor de jogos a necessidade de utilizar diretamente DirectX ou OpenGL (apesar de ainda ser possível, caso necessário), suportando a criação de Shaders complexos com a linguagem Cg da NVidia. Internamente, o subsistema de simulação física é o popular PhysX, também da NVidia. Para a execução de scripts, a Unity usa uma versão de alto desempenho da biblioteca Mono, uma implementação de código aberto do framework .Net da Microsoft.

Ainda que seja uma ferramenta que inclui o estado da arte no seu segmento, a Unity3D tem um preço acessível, o que é apenas mais uma das razões para sua crescente popularidade. Mesmo usando a versão mais barata da Unity3d, os jogos podem ser desenvolvidos para PC, Mac ou mesmo embutidos em uma página Web. Com a aquisição de licenças específicas, pode‐se desenvolver e distribuir jogos para iPhone, através da loja online da Apple, ou mesmo para o console Wii da Nintendo.

1.1 ‐ Interface

O motor de jogos Unity3D possui uma interface bastante simples e amigável que objetiva facilitar o desenvolvimento de jogos de diversos gêneros e outros sistemas de visualização. Sua área de trabalho é composta de várias janelas chamadas views, cada uma com um propósito específico. A figura abaixo é uma captura contendo uma representação esquemática e a identificação de cada uma dessas janelas no editor de cenas da Unity3D.

VIII Brazilian Symposium on Games and Digital EntertainmentRio de Janeiro, RJ – Brazil, October, 8th-10th 2009

Figure 1 ‐ Interface do editor de cena da Unity3D (UNITY TECHNOLOGIES 2009A)

Project view

A janela Project é a interface para manipulação e organização dos vários arquivos (Assets) que compõem um projeto tais como scripts, modelos, texturas, efeitos de áudio e Prefabs, os quais serão detalhados mais adiante na seção de scripting. A estrutura exibida na janela Project é correspondente à sub‐pasta Assets dentro da pasta do projeto no sistema de arquivos do computador. Recomenda‐se que a manipulação de sua estrutura e conteúdo seja efetuada somente dentro da Unity3D, a fim de manter a integridade dos metadados que são associados a estes elementos. Entretanto, certas mudanças, como atualização de uma textura por um editor de imagens por exemplo, ou mesmo a adição de novos Assets, pode ser feita de forma segura diretamente no sistema de arquivos.

Figure 2 ‐ Janela Project

VIII Brazilian Symposium on Games and Digital EntertainmentRio de Janeiro, RJ – Brazil, October, 8th-10th 2009

Hierarchy view

A janela Hierarchy exibe todos os elementos da cena que encontram‐se na cena que se está editando. Além disso, nessa janela podemos organizar e visualizar a hierarquia de de composição entre os vários objetos que compõem a cena (grafo de cena). O funcionamento desses objetos, bem como a hierarquia de transformação será explicado mais detalhadamente na próxima seção.

Figure 3 ‐ Janela Hierarchy com dois objetos

Scene view

A janela Scene é a forma principal de manipulação dos elementos visuais no editor de cenas da Unity, possibilitando a orientação e posicionamento desses elementos com um feedback imediato do efeito das alterações efetuadas. Nesta janela, pode‐se manipular graficamente os objetos através das opções de arrastar e soltar com o mouse. Essa manipulação é semelhante àquela de ferramentas de modelagem 3D e pode‐se manipular objetos tais como câmeras, cenários, personagens e todos os elementos que compõem a cena.

Devido a sua grande importância durante o desenvolvimento de uma aplicação, várias formas de navegação são oferecidas a fim de aumentar ainda mais a produtividade do desenvolvedor. Além disso, as ferramentas básicas de manipulação dos elementos da cena, tais como pan, translação, rotação e escala também estão disponíveis para utilização nesta janela através de atalhos de teclado (teclas Q, W, E e R).

VIII Brazilian Symposium on Games and Digital EntertainmentRio de Janeiro, RJ – Brazil, October, 8th-10th 2009

Figure 4 ‐ Janela Scene

Game view

A janela Game é responsável pela visualização da aplicação em desenvolvimento da forma que ela será exibida quando finalizada. Nessa janela, pode‐se rapidamente ter uma prévia de como os elementos estão se comportando dentro da aplicação. Além disso, a Unity fornece a opção de se paralisar (botão pause) a simulação enquanto ela estiver em depuração, de forma a possibilitar que os parâmetros dos vários elementos possam ser ajustados para experimentação. Lembramos que o ajuste desses parâmetros não necessitam que a simulação esteja paralisada, podendo ser alterados inclusive enquanto a simulação esteja em execução.

Nesta janela, também pode‐se visualizar várias informações estatísticas (stats) sobre a simulação, tais como tempo de processamento e número de frames por segundo, número de triângulos e vértices renderizados, memória de textura utilizada, entre outras. Esta opção é importante para a depuração do desempenho da simulação para uma posterior otimização, caso seja necessário.

Inspector view

Na janela Inspector, tem‐se acesso aos vários parâmetros de um objeto presente no cenário, bem como aos atributos de seus componentes (Components). Essa estrutura utilizada pela Unity para a composição de objetos será melhor explicada na próxima seção. Ainda na janela Inspector, pode‐se ajustar os atributos públicos (parâmetros) de cada componente, inclusive durante a execução da aplicação.

VIII Brazilian Symposium on Games and Digital EntertainmentRio de Janeiro, RJ – Brazil, October, 8th-10th 2009

Figure 5 ‐ Janela Inspector

(Parte 1 de 5)

Comentários