Iniciar o desenvolvimento de Games com Unity 3D
Atualmente, um dos principais nichos do mundo da computação é o desenvolvimento de games. Desde a programação dos motores de jogo até o design do game em si, trata-se de uma arte que envolve, geralmente, muitas pessoas. Porém, com o grande salto de qualidade dos smartphones, o desenvolvimento de games cresceu enormemente, e muitos desenvolvedores resolvem se aventurar na criação de jogos simples, que muitas vezes se tornam grandes sucessos, vide Angry Birds.
Para facilitar o desenvolvimento de jogos, surgiu o Unity 3D, um motor de jogo genérico, além de uma ferramenta extremamente poderosa para criação de games de todos os tipos, para várias plataformas diferentes. Essa ferramenta permite a utilização de todo tipo de scripts, tanto na linguagem C# como em JavaScript, para adicionar lógica ao seu game. Já em termos de elementos visuais, o Unity permite a utilização de elementos criados nas principais aplicações do gênero, como Maya e Blender.
Curso: Curso Unity 3D - Aula 1
Introdução ao Unity 3D
O Unity 3D se apresenta como um Game Engine, ou motor de jogo, mas na realidade é muito mais do que isso. A ferramenta possui um estilo de programação e organização dos projetos todo especial, além de muito simples. A grande sacada da ferramenta é apostar no que já está pronto, criando muitas possibilidades aos desenvolvedores, que podem focar no que fazem de melhor, que é criar o comportamento dos PCs (Player Characters) e NPCs (Non-Player Characters).
O Unity tem um foco muito claro de desenvolvimento, embora possa ser utilizado para outros tipos de projeto com alguma tranquilidade. Ele se propõe a ser um modelo para a criação de jogos de aventura, como RPGs, FPSs e TPSs. Tudo isso está permeado por uma capacidade gráfica muito grande.
Uma das grandes vantagens que o Unity nos traz é a possibilidade de utilizar elementos criados por outros em nossos games. Afinal, é muito raro encontrarmos um programador com aptidão para design gráfico. Como mostra a Figura 1, podemos realizar o download de inúmeros elementos gráficos para nosso game, a partir da loja oficial do Unity 3D (Asset Store - https://www.assetstore.unity3d.com/). Essa loja possui vários elementos disponíveis, desde simples modelos até projetos completos, onde o desenvolvedor pode conhecer e aprender mais sobre os meios do Unity. Existem vários elementos gratuitos, que podem ser utilizados em seus games. Porém, obviamente, o que há de melhor em termos gráficos são pagos.
Outra grande vantagem do Unity é a disponibilização de ferramentas de aprendizado para o desenvolvedor. No site da ferramenta (http://unity3d.com/learn) estão disponíveis vários tutoriais, além de toda a documentação necessária para o desenvolvedor utilizar as classes do Unity em seus scripts. Como podemos ver na Figura 2, existem tutoriais em diversos tópicos, como animação, áudio, navegação e scripts. Além disso, o Unity também fornece a oportunidade de treinamentos ao vivo, em algum tópico recente da ferramenta.
Atualmente, o Unity está em sua versão 5, que veio com algumas melhorias com relação ao Unity 4. Houveram algumas melhorias na seção de áudio dos games, bem como na iluminação dos mesmos. Outras alterações foram realizadas, porém nada muito radical. Uma das principais alterações para essa nova versão foi a criação de um editor 64bits, o que melhora a capacidade do Unity para projetos maiores.
Outra grande vantagem que o Unity traz é na sua utilização. Para desenvolvedores solo, a grande sacada é a utilização da versão gratuita do Unity. Essa versão não contém os elementos avançados disponíveis na ferramenta, como filtros de áudio e informações de performance, mas é uma excelente opção para jogos mais simples. Além disso, com o download da versão free do Unity, o desenvolvedor ganha 30 dias da versão Pro, para ter uma ideia do que está perdendo. Para mais informações, acesse http://unity3d.com/unity/licenses. Caso o desenvolvedor esteja interessado em adquirir a licença do produto, o Unity oferece a compra da licença, por $1500, ou o aluguel, por $75 ao mês.
O Unity permite o desenvolvimento de games pra diversas plataformas, e essa é a principal vantagem da ferramenta. Com ele, é possível criarmos games para iOS, Android, BlackBerry, Windows Phone ou Windows. Não é necessário nenhuma programação extra, apenas a reconstrução do projeto com a plataforma-alvo selecionada.
Entendendo o Unity 3D
Antes de começarmos a criação de nossos games com o Unity, é preciso que entendamos como o mesmo funciona internamente. O motor de jogo possui uma formulação toda especial, que deve ser levada em consideração quando estamos criando um game com a ferramenta. É preciso entender o que são e como trabalhar com Game Objects, Models, Materials e Textures, entre outros elementos importantes únicos do Unity.
Primeiramente, o mais importante. Os games do Unity são baseados em cenas, os Game Objects são praticamente todos os objetos dentro da cena. São todos os elementos posicionados dentro da cena através de um sistema de coordenadas, seja em 2 ou 3 dimensões. Câmeras, modelos, luzes, sistemas de partículas: todos são Game Objects. Esses elementos são a unidade fundamental dentro de qualquer cena de game dentro do Unity. Todos os objetos do game podem se movimentar dentro da cena (embora nem todos o façam). Para isso, o Unity utiliza um conceito um pouco diferente, chamado de Transform. Cada objeto dentro do game no Unity possui um transform, que por sua vez contém as coordenadas para a posição, rotação e escala do objeto, como vemos na Figura 3. A rotação é expressada em coordenadas retangulares através dos chamados ângulos de Euler, que variam de 0 a 360º.
Para movimentar um objeto dentro da cena, é bastante simples. Basta modificar a posição do objeto utilizando um script como mostrado na Listagem 1, que altera a coordenada x da posição do objeto. Já para rotacionar um objeto, é um pouco mais complexo. As rotações no Unity são controladas pela classe Quaternion, que é uma classe bastante complexa. Essa classe possui alguns métodos interessantes, entre os quais podem ser destacados o Slerp(from, to, time) e o Lerp(from, to, time), que servem para interpolar o objeto de uma rotation (from) para outra (to) por um tempo time. A utilização dos mesmos está exemplificada também na Listagem 1.
Listagem 1. Rotação e translação de objetos
void Update () {
Quaternion to = new Quaternion ();
gameObject.transform.position = new Vector3 (gameObject.transform.position.x + 1f, gameObject.transform.position.y, gameObject.transform.position.z);
gameObject.transform.rotation = Quaternion.Slerp (gameObject.transform.rotation, to, Time.time * 0.1f);
}
Outros elementos importantes dentro das cenas do Unity são os modelos, materiais e texturas (Models, Materials e Textures). Os modelos são os elementos gráficos dentro de uma cena. Esses elementos são modelados utilizando materiais, texturas e os chamados shaders. Os materiais são baseados em texturas e shaders: a textura diz o que é desenhado na superfície do material, enquanto os shaders dizem como será desenhado. O modelo da Figura 4 mostra como funciona essa correlação entre esses elementos.
Outro elemento essencial dentro de muitos games do Unity, embora não em todos, são os Terrains. Esses elementos são utilizados para a criação de paisagens dentro das cenas, principalmente utilizados em games ao ar livre. Como podemos observar na Figura 5, esses elementos também são considerados Game Objects dentro do Unity e podem ser alterados da forma que desejarmos, para criarmos montanhas, depressões, entre outros. Basicamente, a cena é criada da forma que o desenvolvedor desejar. Além disso, esse elemento permite a adição de materiais que representam água, grama, pedras etc., elementos disponíveis gratuitamente na Asset Store. Cada pedaço do terreno pode ser modificado para que o jogador tenha mais dificuldades (ou não possa) passar sobre a água, por exemplo.
O Unity também permite a criação dos chamados prefabs (pré-fabricados). Estes são objetos complexos, normalmente um conjunto de vários outros objetos, que são montados de uma determinada forma e salvos para serem reutilizados. Por exemplo, se criarmos um objeto que contém um cubo e um cilindro, como mostra a Figura 6, podemos salvá-lo como um prefab para ser reutilizado. Para salvá-lo, basta arrastar o elemento para a pasta Assets, normalmente na parte inferior da ferramenta.
Além disso, é preciso conhecer e trabalhar com câmeras e luzes dentro de um game. Esses dois são talvez os mais importantes, graficamente, dentro de um game. São elementos que são responsáveis por criar grande parte da experiência que o usuário terá dentro do game. No Unity, cada game pode conter várias câmeras e luzes, dependendo da necessidade do desenvolvedor.
As luzes, dentro do Unity, podem ser de 3 tipos: direcional, pontual e spotlights. A luz direcional faz parte de quase todos os games ao ar livre, representando o sol. Esse tipo de luz irá iluminar todos os objetos que ela alcançar. Trata-se de uma luz com alcance infinito em uma determinada direção. Já a luz pontual funciona como uma lâmpada: ela irá transmitir luz de uma direção central esfericamente em todas as direções. É o tipo mais comum em áreas internas dentro das cenas. Esse tipo de luz permite uma definição de alcance, definida na propriedade Range. Por fim, as spotlights são luzes que iniciam em um ponto e irradiam em uma determinada direção em uma formato cônico, como em um farol de carro. Essas luzes possuem a propriedade Spot Angle, que determina o raio do cone de luz emitido.
Já as câmeras possuem apenas um tipo, e várias propriedades que podem ser adaptadas dependendo da necessidade dentro da cena. Algumas dessas propriedades são necessárias quando lidamos com múltiplas câmeras, por exemplo. A propriedade Depth é responsável por informar ao Unity qual a ordem de prioridade para as mesmas. Números menores são desenhados primeiro, o que significa que os números maiores podem sobrescrever os menores. Para evitar esse comportamento quando utilizando múltiplas câmeras, é preciso entender outra propriedade, View Port. Como podemos observar na Figura 7, as duas câmeras possuem profundidades diferentes (propriedade Depth), e são mostradas em posições diferentes através da propriedade View Port, com uma delas funcionando como um mapa no canto inferior esquerdo.
Por fim, mas não menos importante, é preciso entender um pouco sobre os scripts dentro de um Unity Game. Os scripts são atribuídos aos Game Objects, definindo um comportamento qualquer para ele. Dentro do Unity, esses scripts podem ser criados utilizando C#, JavaScript ou BooScript. Geralmente, como mostrado na Listagem 1, todos os scripts irão trabalhar de alguma forma como o objeto do jogo. Além disso, o Unity possui inúmeras classes que cuidam de translação, rotação, colisão, animação, entre outros, dos Game Objects dentro da cena de nosso game. Todos os scripts são criados em um software anexo ao Unity, o MonoDevelop. Para mais informações, acesse http://docs.unity3d.com/Documentation/ScriptReference/index.html.
Criando um game simples com C# e Unity
Para finalizarmos nosso artigo, vamos criar um game extremamente simples utilizando o Unity. Tudo o que esse game irá fazer é movimentar um PC dentro do terreno que foi criado anteriormente. Esse terreno será melhorado de forma a se parecer um pouco mais com uma paisagem, pela adição de texturas de grama.
Primeiramente, vamos preparar a cena de nosso game. Como já vimos, o terreno está praticamente pronto, restando apenas adicionar as texturas ao mesmo para criarmos uma experiência interessante para o jogador. Como foi informado anteriormente, o Unity possui alguns elementos gráficos referentes aos terrenos que podem ser utilizados em nossos games. Portanto, iremos importar esses pacotes para nosso projeto, primeiramente. Para isso, basta clicar com o botão direito na pasta Assets e selecionar Import Packages->Terrain Assets. Então, uma tela como a da Figura 8, irá aparecer, onde você pode selecionar os elementos necessários. Nesse caso, iremos selecionar todos e escolhê-los posteriormente.
Então, iremos adicionar as texturas necessárias ao nosso terreno. No Unity, esse processo funciona muito como a criação de uma escultura. Estamos esculpindo o terreno de acordo com as texturas que possuímos. O pacote que adicionamos possui algumas texturas de grama que iremos utilizar em nosso terreno. Para adicionar essa textura, basta clicarmos em Edit Textures->Add Texture, como mostra a Figura 9. Para criarmos nossa cena, iremos adicionar as texturas Grass e Grass (Hill) e adicioná-las ao nosso terreno.
O pacote que importamos para o nosso projeto possui algumas árvores, palmeiras, e para criar uma paisagem mais interessante iremos adicionar algumas delas. Para isso, na aba Trees dentro do terreno, iremos em Edit Trees->Add Tree, e iremos adicionar a palmeira, como mostra a Figura 10. Repare que o número de árvores colocadas na paisagem varia conforme modificamos a propriedade Tree Density.
Agora que temos uma paisagem simples, podemos nos concentrar em outros aspectos da criação do game. Primeiramente, vamos posicionar o nosso prefab criado anteriormente. Nesta etapa, iremos fazer dele o nosso PC. Não se trata de um objeto extremamente complexo (é apenas uma junção de um cilindro e um cubo), mas o conceito é válido aqui. A ideia é fazer com que esse elemento se mova dentro da cena, utilizando as teclas de direção ou WASD.
Primeiramente, vamos definir os controles do nosso game. Para isso, vamos em Edit->Project Settings->Input, onde esses elementos podem ser definidos. Como vemos na Figura 11, o movimento é definido nas direções horizontal e vertical, tanto o botão normal e o botão alternativo. Ao longo do eixo horizontal, esquerda e direita ou a e d, e ao longo do eixo vertical, cima ou baixo ou w e s.
Agora, iremos transformar o prefab criado em um Character Controller. O Unity fornece dois deles, um em primeira e outro em terceira pessoa, prontos para utilização. Para isso, basta importar o pacote Character Controller utilizando o mesmo procedimento que utilizamos para as texturas do terreno e simplesmente utilizar. Porém, vamos trabalhar de forma um pouco diferente aqui.
Primeiramente, vamos entender o que é o Character Controller. Trata-se de um elemento físico do game, responsável por controlar os Game Objects da maneira que o desenvolvedor desejar, além de também tratar da colisão entre objetos. Para adicionar esse elementos ao nosso prefab, vamos em Add Component->Physics->Character Controller, como mostra a Figura 12.
Para podermos movimentar o nosso jogador dentro da cena, precisamos de um script que controle esse movimento. Para isso, vamos criar um script chamado MovimentoGameExemplo.cs, e adicionar o código necessário para isso. Antes de adicionarmos o código, vamos entender os métodos que o Unity cria para nós. O método Start() é executado apenas uma vez, antes do começo do game, e normalmente é utilizado para inicialização de variáveis, entre outros. O método Update(), por sua vez, é executado a cada frame. Aqui, é preciso ter cuidado para não sobrecarregar o método Update() com muita informação, uma vez que ele será executado constantemente.
Em nosso game, o jogador irá se movimentar apenas no plano. Portanto, iremos alterar apenas as componentes x e z de nossa posição. Antes de mais nada, porém, iremos pegar o movimento das teclas de direção definidas. Para isso, utilizamos o método da classe Input, GetAxis(). Esse método recebe como parâmetro o nome da entrada, definido no InputManager. Como vimos na Figura 11, esses nomes são Horizontal e Vertical. Então, iremos utilizar esses valores obtidos para atualizar a posição do jogador, conforme mostra a Listagem 2.
Listagem 2. Movimento do jogador
void Update () {
float x = Input.GetAxis ("Horizontal");
float z = Input.GetAxis ("Vertical");
gameObject.transform.position = new Vector3 (transform.position.x + x, transform.position.y, transform.position.z + z);
}
Com isso, temos um jogador que se movimenta ao longo de um terreno. Repare que o jogador passa por dentro das montanhas e se movimenta sem qualquer controle de velocidade. Para controlarmos isso, seria necessário criar elementos de detecção de colisão, entre outras ferramentas mais avançadas. Para evitar esses problemas, uma ideia seria utilizar os scripts prontos que temos a nossa disposição no pacote de Character Controllers do Unity. Além disso, o Unity também fornece um script que permite à câmera acompanhar o jogador, o que é desejável em praticamente todos os jogos em terceira pessoa.
Como vimos, o Unity possui inúmeros elementos que servem para facilitar a vida do desenvolvedor de games. Porém, existem vários aspectos que precisam ser levados em conta ao longo do desenvolvimento, caso queiramos criar uma jogabilidade melhor para nossos jogadores.
Uma das grandes vantagens na utilização do Unity é a presença de uma comunidade bastante ativa, sempre atenta às novidades. Além disso, é muito simples de aprender a utilizar a ferramenta, e vale a pena. A criação de games acaba ficando muito mais simples quando utilizamos o Unity. Porém, é preciso ter atenção, pois a forma de desenvolvimento é um tanto quanto diferente daquela que verificamos em outros motores de jogo, como, por exemplo, o Microsoft XNA.
Links Úteis
- Site do Unity 3D
- Download Unity 3D
- O que é Unity 3D?:
O Unity3D é uma ferramenta de desenvolvimento de jogos completa e atualmente está sendo utilizada tanto por grandes empresas como por desenvolvedores individuais (indie developers
Saiba mais sobre Unity 3D ;)
- Unity 3D: Introdução ao desenvolvimento de games:
Conheça nesse artigo o Unity 3D e saiba como criar games com essa poderosa ferramenta de criação de jogos mobile. - Introdução ao Unity e ao desenvolvimento de games:
O Unity 3D é um motor para o desenvolvimento de jogos eletrônicos 2D e 3D. - Introdução ao Unity: Iniciando um jogo 2D multiplataforma:
Veja nesse artigo como criar o jogo Space Shooter utilizando o Unity, que nos proporciona o desenvolvimento mais fácil de jogos 2D. Existem inúmeras possibilidades de melhoria para este jogo, envolvendo inclusive o teste de suas diferentes versões.
Confira outros conteúdos:
Teste unitário com NUnit
Como migrar projetos do ASP.NET MVC...
Crie relatórios com o Stimulsoft...
Promoção de Natal
Oferta exclusiva de Natal!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 59,90
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 59,90 /mês
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.