Você está na página 1de 16

12/12/2023, 13:08 Programação para jogos 3D

Programação para jogos 3D


UNIDADE 1 - GAME
ENGINE

Autoria: Felipe Oviedo Frosi - Revisão técnica: Deivith Gonçalves


da Cunha

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 1/16
12/12/2023, 13:08 Programação para jogos 3D

Introdução
Caro(a) estudante, começaremos esta unidade apresentando conceitos e
aplicações no ambiente de desenvolvimento de jogos. Esse será o alicerce
para construirmos o conhecimento proposto na disciplina. Nosso objetivo
principal é trabalhar o level design e a programação de elementos
relacionados, como non-player characters (NPCs), e construções de
trajetórias com algoritmos de busca. Assim, o conteúdo desta unidade
pretende apresentar os conceitos de uso de motores de jogos para a
implementação de jogos. As atividades propostas aqui serão focadas na
engine Unity, porém é importante que você, estudante, não se prenda a
uma única ferramenta. E, apesar de serem apresentados conceitos e
formas de aplicação na Unity, esses mesmos conceitos podem ser
aplicados em outras tecnologias de motores de jogos, como Unreal e Godot, considerando as adaptações necessárias. Inicialmente
serão apresentados os aspectos generalistas da engine Unity e a apresentação das principais ferramentas do ambiente de
desenvolvimento, incluindo formas de navegação e ferramentas visuais, diretórios, gerenciadores de arquivos e recursos, entre
outros. Após, será demonstrado um panorama sobre a programação em Unity adotando a linguagem C#. Também serão focadas
boas práticas de organização de projeto e um panorama inicial de construção de níveis e level design, tanto em ambientes
bidimensionais quanto tridimensionais, oferecendo um arcabouço tecnológico vasto o suficiente para a implementação de
diferentes tipos de jogos.
Bons estudos!

1.1 Visão geral e


introdução

Há alguns anos era comum discutir se a melhor abordagem para desenvolver jogos era desenvolver a própria engine ou utilizar engines de
terceiros. Atualmente, é muito comum a segunda opção, em que podem ser citadas Unity, Unreal, Godot, Construct, Game Maker, entre
outras. De fato, é bastante raro verificar algum estúdio de desenvolvimento de jogos que desenvolva a própria engine, pois esta consiste em
uma base tecnológica tão complexa de desenvolver quanto o próprio jogo. Dado esse contexto, abordaremos os conceitos da disciplina e
mostraremos possíveis aplicações por meio da game engine Unity. Menard e Wagstaff (2014, p. 6) afirmam que:

Com uma ideia melhor de porque as pessoas gostam de jogar, vamos considerar as implicações. Supondo que você não tenha uma equipe de cinquenta
artistas e dois anos para produzir seu jogo, você terá que tomar algumas decisões de design inteligentes, para permitir uma boa chance de sucesso. Enredo,
arte conceitual, interação e, até certo ponto, funcionalidade podem continuar independentemente do motor de jogo. Em algum momento, no entanto, você
encontrará essa tecnologia, independentemente de quantas horas de trabalho você alocou para os ativos de arte, porém esses não permitirão realizar tudo o
que você pode imaginar. A parte mais difícil para o artista é definir o que pode ser sacrificado. Na fase de design, com alguma premeditação, você pode
tornar o processo menos doloroso, conforme você visualiza os locais intrigantes e as soluções divertidas.

Essas aplicações, porém, podem ser feitas em outras ferramentas e engines, pois não há uma tecnologia absoluta na indústria de jogos,
além de existir a possibilidade de mudanças nas tecnologias vigentes.

1.1.1 Ambiente geral de desenvolvimento


As engines mais usuais do mercado têm adotado ferramentas visuais como parte do desenvolvimento de jogos. Nesta disciplina, será
utilizada a Unity como referência, e, para início do estudo, será apresentado o ambiente de desenvolvimento. É a partir desse ambiente que
serão trabalhados conceitos mais aprofundados sobre personagens não controláveis, conhecidos também como non-player characters

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 2/16
12/12/2023, 13:08 Programação para jogos 3D
(NPCs), level design e algoritmos de busca (KYAW, 2013).

Você sabia?
A Unity pode ser obtida gratuitamente no endereço
https://unity3d.com/get-unity/download
(https://unity3d.com/get-unity/download).

Apesar de ser gratuita, o desenvolvedor que alcançar uma determina receita anual em vendas deve pagar um valor para os donos da
ferramenta, porém esse valor de receita é relativamente elevado, ou seja, só existirão custos com a ferramenta na minoria dos projetos,
aqueles que de fato alcançarem um resultado comercial expressivo. Além disso, o uso da ferramenta para estudo individual é liberado.
Na tela de criação da Unity, é permitido adotar o modo 2D ou o 3D (SMITH; QUEIROZ, 2013). Para estudarmos sobre o ambiente de
desenvolvimento, adotaremos o modo 3D, que não possui praticamente nenhuma diferença em relação ao bidimensional — 2D. A figura
“Ambiente de desenvolvimento da engine Unity” apresenta esse ambiente de desenvolvimento. Inicialmente, é essencial compreender as
principais características da tecnologia, para depois implementarmos algoritmos de busca, design de níveis e NPCs.

Figura 1 - Ambiente de desenvolvimento da engine Unity


Fonte: Elaborada pelo autor, 2020.

#PraCegoVer: na imagem, é apresentado o ambiente visual de desenvolvimento da Unity. Na parte esquerda e superior, são listados todos
os objetos presentes na cena. Na parte central, estão situados os objetos. Na imagem, aparece um cubo, em que está aplicada a ferramenta
de translação com setas em diferentes direções, para que o objeto possa ser movimentado. Na parte da direita, são apresentadas as
propriedades do cubo, na ferramenta Inspector, que mostra Posição, Rotação e Escala, componentes de malha, de renderização e de
colisão.

A cena pode ser definida como um conjunto de objetos que delimitam o contexto atual do jogo, que pode ser uma fase específica ou um
menu, por exemplo. Essa organização não é algo exclusivo da ferramenta, mas é uma estrutura geralmente usada em jogos, denominada
grafo de cena. Na cena, há uma hierarquização dos objetos, ou seja, alguns podem ser hierarquicamente dependentes de outros. Essa
organização facilita o controle dos objetos e das animações.
Um exemplo de hierarquia é na constituição do corpo de um humanoide.

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 3/16
12/12/2023, 13:08 Programação para jogos 3D

Braço

É possível que uma parte do corpo seja um braço.

Mão

O braço terá um objeto dependente que represente a mão.

Dedos

A mão, por sua vez, terá cinco objetos dependentes, sendo estes cada um dos dedos.

Mais ao centro é possível observar visualmente os objetos presentes na cena. Esse editor visual é essencial para a construção do level
design em um jogo, e, por ele, é possível posicionar objetos e construir a cena de acordo com o objetivo do desenvolvedor. Cada objeto
selecionado na cena possui propriedades. No caso da imagem, está selecionado um cubo. Ao lado da cena visual, na parte direita do
ambiente, existe o elemento Inspector, que tem o objetivo de apresentar as propriedades e características presentes em qualquer objeto do
projeto. Essas propriedades podem variar e são denominadas de componentes. No caso da Unity, o primeiro componente exibido é o
Transform (SMITH; QUEIROZ, 2013), que exibe posição, tamanho (escala) e o ângulo de rotação. Em outras engines as nomenclaturas e
divisões podem ter variações, mas, em geral, as partes dos projetos são divididas em objetos e estes possuem propriedades, algo bastante
similar ao conceito de instâncias de objetos e atributos em programação orientada a objetos.
Abaixo da parte visual da cena estão os elementos de organização do projeto. Na esquerda, são listados os assets, ou seja, todos os objetos
que podem ou não estar presentes na cena. Esses elementos não são somente visuais, podem ser também scripts de programação ou,
ainda, elementos de áudio. Na parte inferir central, é possível visualizar os objetos em mais detalhes, inclusive sendo possível selecioná-los e
verificar suas propriedades no Inspector. Você deve estar atento a essa organização, pois é um padrão usualmente adotado no
desenvolvimento de jogos, não estando atrelado a somente uma ferramenta específica.

Você quer ler?


A documentação oficial da Unity é um vasto campo de aprendizado sobre a ferramenta.
Para aprofundamento do uso básico da disciplina, você pode acessar o site.
Acesse (https://www.devmedia.com.br/desenvolva-jogos-com-a-unity-
3d/29125)
De forma complementar, leia a documentação oficial (em inglês).
Acesse (https://learn.unity.com/tutorial/essential-unity-concepts?uv=4.x)
A interface da Unity pode ser alterada de acordo com o contexto em que está sendo aplicada, por exemplo: ao utilizar a ferramenta com dois
ou três monitores, pode ser proveitoso alterar a disposição das janelas, que são flutuantes e podem ser modificadas a qualquer momento.

1.1.2 Tipos de ferramentas e navegação


A Unity apresenta uma variabilidade considerável de ferramentas, dentre elas a possibilidade de movimentar objetos, adaptar seu tamanho
(escala) e seu ângulo de rotação. Essas operações são essenciais para a construção do level design em um jogo. Ao selecionar um objeto, a
engine apresenta no canto superior direito da interface alguns botões em que é possível selecionar o tipo de operação a ser realizada, sendo
as principais: translação, rotação e escala. Essas operações podem ser definidas, respectivamente, com atalhos nas teclas “W”, “E” e “R”.
Aqui, destaca-se que essas operações não são exclusivas no contexto de jogos, mas são frequentemente usadas no contexto de
computação gráfica como um todo, tendo uma tradução direta em geometria espacial. As engines, inclusive a Unity, acabam por facilitar a

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 4/16
12/12/2023, 13:08 Programação para jogos 3D
realização dessas operações, mas é essencial que você, estudante, compreenda que as movimentações, translações e escalas dos objetos
ocorrem essencialmente por cálculos geométricos. Na figura “Ferramenta de rotação na Unity” é exibida essa ferramenta, que pode ser
utilizada de forma visual, sem a necessidade de programação.

Figura 2 - Ferramenta de rotação na Unity


Fonte: Elaborada pelo autor, 2020.

#PraCegoVer: a figura mostra um cubo dentro da ferramenta de representação visual da Unity com a ferramenta de rotação aplicada. Com
essa ferramenta, é possível alterar o ângulo de rotação do objeto com uma considerável precisão.

Antes de aprofundar a utilização da engine, é sugerido que sejam exercitadas essas operações básicas, para que você possa facilmente
aplicar as alterações necessárias e construir um level design adequado.

Vamos Praticar!
Você foi designado para definir a engine a ser utilizada no próximo projeto do
estúdio em que está atuando. Pelo escopo do projeto, você acredita que a Unity é
a melhor opção. Escreva no mínimo dois parágrafos argumentando os motivos de
a engine ser mais adequada para o projeto em questão.

1.2 Ambiente de programação e


scripts

Trabalhar com programação em uma game engine, apesar de ter as suas particularidades, é uma atividade que possui grande relação com a
programação de outros tipos de softwares. Para programar um jogo, é necessário conhecer os aspectos básicos de programação, como os
elencados a seguir.

Declaração de variáveis.

Comandos de entrada e saída de dados.

 

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 5/16
12/12/2023, 13:08 Programação para jogos 3D
Utilização de procedimentos, funções.

Orientação a objetos.

Estrutura de dados.

A forma de aplicar a programação, naturalmente, terá uma relação direta com a parte visual do projeto, portanto o programador deve estar
atendo para ambos os aspectos e contextos, tanto o código quanto a parte visual.

Você quer ver?


Os recursos das game engines estão sendo melhorados e atualizados
constantemente, acompanhando a indústria de jogos e as novas tecnologias de
computação gráfica. No ano de 2020, a Unity apresentou novidades importantes sobre
suas inovações no SBGames, que é o maior evento acadêmico da área de jogos no
Brasil. Acompanhe a apresentação na íntegra.
Acesse (https://youtu.be/kdU08HTjiG0)
Mesmo tendo diversos aspectos facilitados pelas estruturas da engine, é comum que programadores mais experientes implementem funções
que já estão prontas no contexto tecnológico da ferramenta. Assim, mesmo programadores experientes devem estudar a documentação para
evitar retrabalho desnecessário.

1.2.1 Linguagem de programação


Em geral, as game engines adotam uma linguagem de programação principal. No caso da Unreal, é possível realizar a programação de
forma visual através dos denominados blueprints, além de ser possível programar diretamente em C++. Na Unity, a linguagem central é o C#.
Ao criar um script para programar na Unity, a estrutura de base será no formato apresentado pela figura “Estrutura base de um script C#”.

Figura 3 - Estrutura base de um script C#


Fonte: Elaborada pelo autor, 2020.

#PraCegoVer: o código fonte mostra um script base da Unity, em que são adicionadas as bibliotecas Collections e Unity Engine. Há uma
classe chamada ControleCubo e dentro dela dois métodos: Start e Update.

Você deve estar atento às características básicas de um script.

1
Bibliotecas

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 6/16
12/12/2023, 13:08 Programação para jogos 3D

Primeiramente, no cabeçalho são determinadas as bibliotecas utilizadas. Com o aprofundamento dos estudos da disciplina, é possível que seja
necessário incluir mais bibliotecas, especialmente para implementar algoritmos de busca (KYAW, 2013).

2
ControleCubo

Depois, observa-se a estruturação de uma classe chamada ControleCubo. Cada script de programação criado da Unity terá uma classe, isto é,
locais em que serão estruturados os comandos e ações.

3
MonoBehaviour

Ao lado do ControleCubo, observa-se o comando: MonoBehaviour, uma estrutura nativa da Unity, necessária para relacionar um script de
programação a um objeto ou a um personagem no jogo.

Aqui, o MonoBehavaiour está sendo herdado por ControleCubo, ou seja, todas as suas propriedades agora fazem parte também do
ControleCubo. O MonoBehaviour, como vimos é nativo da Unity, sendo necessário para relacionar um script de programação a um objeto no
jogo — que pode ser um simples cubo, como o exemplo aqui apresentando —, ou a um personagem de jogo, que é um objeto completo.
Dentro da estrutura da classe são elencados dois métodos: Start() e Update(). Em linhas gerais, todos os comandos de programação estarão
nos métodos, inclusive a implementação dos algoritmos de busca.

O método Start() tem a característica de ser executado apenas uma vez, quando o objeto a qual pertence é
Start()
iniciado. Ele funciona basicamente como um inicializador do objeto.

O método Update() é diferente. Nele, todos os comandos são chamados constantemente enquanto o objeto
Update()
ao qual pertence estiver ativo, e novamente essa característica não é exclusiva da Unity.

Complementando, é necessário compreender que os jogos funcionam de forma cíclica dentro de uma estrutura chamada loop principal, na
qual é feita a leitura cíclica de todos os objetos do jogo. A seguir, um exemplo de uma possível implementação do script, representada na
figura “Leitura do teclado para translação”.

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 7/16
12/12/2023, 13:08 Programação para jogos 3D

Figura 4 - Leitura do teclado para translação


Fonte: Elaborada pelo autor, 2020.

#PraCegoVer: no script é declarada uma variável chamada Velocidade, que deve determinar a velocidade de movimento do objeto. O
método Start sorteia a velocidade entre 5 e 10, e no método Update é verificada a leitura da tecla W, em que ocorre uma translação de
acordo com a variável velocidade.

Nesse exemplo, dois aspectos são relevantes: primeiro, a variável velocidade, que poderia ter iniciado com um valor fixo, apresenta um
sorteio para fazer a atribuição de sua intensidade. Esse sorteio ocorre somente uma vez e necessariamente deve estar em um método,
portanto o uso do Start() é necessário. Essa variabilidade pode ser interessante para definir a velocidade de diferentes NPCs que aparecem
em conjunto em uma mesma cena, pois tende a contribuir para que as movimentações fiquem mais orgânicas e menos robotizadas. O
segundo aspecto relevante é o uso do Update(). Ao pressionar a tecla “W”, o objeto cubo deve se deslocar no eixo Z, que em geral significará
a profundidade no plano 3D. Essa verificação da tecla precisa estar em loop, sendo feita a todo momento, caso contrário, não é possível
verificar a interação do jogador. Uma possível variante do código seria o exemplo da figura “Translação com valor fixo de velocidade”, no qual
a variável de velocidade não é sorteada, mas definida pelo desenvolvedor. Por ser uma variável pública, ela pode inclusive ser definida no
editor visual, atividade que não necessariamente deve ser realizada pelo programador.

Figura 5 - Translação com valor fixo de velocidade


Fonte: Elaborada pelo autor, 2020.

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 8/16
12/12/2023, 13:08 Programação para jogos 3D
#PraCegoVer: a figura mostra um script de programação em que a partir da verificação da tecla W é aplicado um movimento de translação
no eixo Z, sem considerar um sorteio para essa variável, mas com valor fixo.

Parte do seu papel, estudante, a partir do uso das estruturas de engine, é fazer esse tipo de avaliação, considerando quando definir ações
em loop ou não.

Você o conhece?
Chris Sawyer é um dos mais famosos desenvolvedores de jogos da indústria, tendo atuado como
programador e designer do Roller Coaster Tycoon, um título de expressivo sucesso nos anos 1990 e que
até hoje possui sequências em diversas plataformas, como consoles, mobile e PC. Saiba mais sobre esse
icônico desenvolvedor de jogo.
Acesse ( http://www.chrissawyergames.com/)

As variáveis dos scripts C# da Unity podem ser públicas (public) ou privadas (private). Sendo públicas, elas podem ser alteradas facilmente
pelo Inspector, de modo visual. É uma boa prática manter públicas somente variáveis que precisam ser alteradas visualmente ou que devem
ser acessadas por outros scripts.

1.2.2 Ferramentas de programação


Verificamos um panorama básico da programação em Unity, porém dois aspectos essenciais ainda são necessários em nosso estudo: como
associar um script de programação a um objeto e como iniciar a programação na Unity.
No ambiente de desenvolvimento, ao clicar com o botão direito, há a opção Create e depois C# script. Ao definir o nome do script,
automaticamente é criada a estrutura apresentada anteriormente, contemplando os métodos Start() e Update(). Para associar um script a um
objeto, basta arrastá-lo para o objeto que foi selecionado com o Inspector, conforme a figura “Componentes do objeto Cube”.

Figura 6 - Componentes do objeto Cube


Fonte: Elaborada pelo autor, 2020.

#PraCegoVer: as propriedades dos objetos são mostradas na ferramenta Inspector dentro da Unity. A imagem mostra as propriedades do
cubo, tendo o script de programação como uma das propriedades.

Conforme apresentado anteriormente, o Inspector apresenta todos os componentes de um objeto, assim, o script será também um
componente. Para ser executado, o script deve estar associado a um objeto, caso contrário seus comandos não alterarão a dinâmica do jogo.
Um objeto pode possuir mais de um script. Pode, por exemplo, ter um script para controle de movimento, de forma similar ao ControleCubo e

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 9/16
12/12/2023, 13:08 Programação para jogos 3D
outro apenas para aplicar algoritmos de busca. Essa organização e estruturação é definida e projetada pelo programador.
Por fim, o ambiente de programação na Unity não é a ferramenta em si, mas um programa auxiliar que será executado em paralelo com a
engine. A Unity possui um programa nativo para auxiliar na programação, porém é bastante comum a utilização do Microsoft Visual Studio,
vastamente utilizado para a programação em C#.

Você sabia?
A versão Community do Visual Studio pode ser obtida gratuitamente
em https://visualstudio.microsoft.com/pt-br/vs/community/
(https://visualstudio.microsoft.com/pt-br/vs/community/).

Para associar o Visual Studio à Unity basta acessar a opção Edit seguida de Preferences e External tools. Depois, selecionar o Visual Studio
no campo External script editor.

Teste seus conhecimentos


(Atividade não pontuada)

1.3 Organização de projeto de


jogos

Assim como em projetos mais tradicionais na área de tecnologia, a organização dos conteúdos em um projeto de jogos é essencial. Por meio
dela, é possível não perder produtividade com a escala do projeto, o que pode ser um fator determinante para sua conclusão. Da mesma
forma, para atender o escopo desta disciplina, é necessária uma variabilidade de recursos, considerando a implementação de NPCs que
utilizam algoritmos de busca. Assim, boas práticas de organização do projeto são relevantes.

1.3.1 Organização de assets


Para manter uma organização coerente, o desenvolvedor deve adotar um padrão de escrita. No caso da figura “Padrão de organização dos
diretórios”, os diretórios são apresentados com o mesmo padrão de escrita.

Figura 7 - Padrão de organização dos diretórios


Fonte: Elaborada pelo autor, 2020.

#PraCegoVer: na imagem, são mostrados os diretórios de organização da Unity, sendo exibidas as pastas Animations, Materials, Mesh,
Prefab, Scene e Textures. Na parte da esquerda as pastas são exibidas em formato de lista e com a hierarquia demostrada, sendo os
subdiretórios situados mais à direita.

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 10/16
12/12/2023, 13:08 Programação para jogos 3D

Todos estão escritos com letra maiúscula, por exemplo. Esse não é o único padrão possível, mas é uma boa prática manter a
homogeneidade no projeto. Além da questão de escrita, é importante observar a hierarquia dos diretórios. No caso da imagem, há um
diretório Personagens e vários subdiretórios, um para cada personagem. Cada diretório contém a totalidade dos recursos dos personagens,
incluindo scripts, efeitos sonoros, texturas, modelos 3D e animações. Não é uma boa prática separar um diretório exclusivo para todos os
scripts, ou para todas as texturas ou animações. O mais adequado é segmentar pelo objeto, já que as engines são capazes de agrupar toda
essa variabilidade de elementos em uma única entidade, que inclusive pode ser exportada para outros projetos e contextos.

Você quer ler?


A Unity possui uma loja com recursos gráficos e funcionais (em inglês) que podem ser
inclusive utilizados como material de estudo de forma gratuita. É essencial que o
desenvolvedor de jogos seja curioso e explore os recursos disponíveis.
Acesse (https://assetstore.unity.com/)
A correta organização dos diretórios facilita a importação e a exportação de modelos e assets no projeto, pois, se organizados de maneira
independente, não afetarão ou comprometerão as demais partes do projeto quando forem inseridos ou retirados.

1.3.2 Importação de objetos


A maioria dos objetos visuais de um projeto de jogos não são desenvolvidos na game engine, mas fora dela, em programas como 3DS Max e
Blender. Para isso, é essencial que ocorra a importação de objetos, que podem ser obtidos de diversas fontes, dentre elas a Asset Store,
conforme figura “Personagem Darius Maximus (Asset Store)”.

Figura 8 - Personagem Darius Maximus (Asset Store)


Fonte: Elaborada pelo autor, 2020.

#PraCegoVer: a imagem mostra, além de um objeto básico, que é o cubo, um modelo 3D de guerreiro com espada, nas cores marrom,
amarelo e azul e um efeito de iluminação não muito acentuado no plano 3D.

Todos os diretórios existentes no projeto também estão no sistema operacional. Assim, basta inserir os modelos e as animações nesses
diretórios para carregá-los no projeto. Apesar disso, o aspecto visual desses objetos pode variar, principalmente em vista da iluminação.
Existem basicamente dois tipos de luzes nas engines: estáticas e dinâmicas.

Estáticas São aplicadas uma única vez e não alteram os objetos em tempo real.

Alteram os objetos em tempo real e exigem maior processamento para serem


Dinâmicas
executadas.

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 11/16
12/12/2023, 13:08 Programação para jogos 3D
Iluminação e uso de modelos adequados são essenciais para um bom desenvolvimento de level design, e esses elementos devem ser
aplicados em conjunto com algoritmos de busca para a implementação de elementos complexos, inclusive NPCs.

Vamos Praticar!
Você possui um orçamento limitado e um prazo curto para realização de um projeto de jogos,
porém, o seu gestor acredita que todo o conteúdo do projeto deve ser autoral. Pesquisando
algumas alternativas, você encontra lojas de recursos, incluindo a Asset Store, e tentará
argumentar sobre os benefícios de usar tais recursos sem perder a originalidade do projeto.
Escreva ao menos dois parágrafos argumentando sobre o uso desses recursos ser
potencialmente benéfico.

1.4 Level design em 2D e


3D

Após estudarmos um panorama sobre o ambiente de desenvolvimento da Unity, suas características de programação e seu sistema de
importação de arquivos, iniciaremos o estudo das diretrizes para implementar o design de níveis em formato bidimensional e tridimensional.

1.4.1 Implementações no plano 2D


A implementação de jogos no âmbito bidimensional possui algumas diferenças do 3D (SMITH; QUEIROZ, 2013). Um aspecto relevante é que
não é considerando o eixo Z, que representa profundidade, o que pode facilitar o desenvolvimento. É comum observar objetos replicados no
cenário 2D, como pode ser observado na figura “Personagem 2D RPG Kit (Asset Store)”.

Figura 9 - Personagem 2D RPG Kit (Asset Store)


Fonte: Asset Store, 2020.

#PraCegoVer: a imagem mostra um ambiente de cenário 2D que remete ao estilo RPG, com um balão preto na parte superior com a
mensagem “Você encontrou uma poção”. Abaixo são exibidas árvores e casas.

A iluminação do ambiente acaba não sendo aplicada em muitos cenários 2D, dado que a cor já é definida no desenho original e não deve ser
alterada, ao menos em parte significativa do design de níveis bidimensionais. Por não existir um eixo Z (profundidade), uma movimentação
de personagem poderia ser trabalhada nos eixos X e Y. No caso do código apresentado na figura “Translação de objeto no eixo X”, a
translação é aplicada somente no eixo X.

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 12/16
12/12/2023, 13:08 Programação para jogos 3D

Figura 10 - Translação de objeto no eixo X


Fonte: Elaborada pelo autor, 2020.

#PraCegoVer: o script acima utiliza o comando Translate para movimentar o objeto, porém aplica somente no eixo X essa translação.
Usualmente, o movimento no eixo X será aplicado na horizontal.

Um aspecto a ser observado é que, mesmo não tendo profundidade, os objetos acabam ficando sobrepostos, portanto, o desenvolvedor deve
estar atento para definir quais elementos são renderizados de forma prioritária nas camadas.

Você sabia?
Além da Unity, uma das engines mais famosas do mercado é a Unreal. Há alguns anos, a Unreal
possuía um custo extremamente elevado e era utilizada por poucos estúdios. Atualmente, qualquer
pessoa pode adquirir a engine gratuitamente e utilizá-la profissionalmente com condições comerciais
bastante favoráveis e viáveis. Para mais informações sobre a Unreal Engine,
acesse: https://forums.unrealengine.com/international/latin-america/1360917-tutoriais-em-pt-
br-sobre-unreal-engine-4 (https://forums.unrealengine.com/international/latin-
america/1360917-tutoriais-em-pt-br-sobre-unreal-engine-4)

A diferenciação entre 2D e 3D não deve ser pelo ponto de vista do jogador, mas pelo modo como a engine está operando a renderização.
Nesse sentido, Mendes et al. (2019, p. 245) afirmam que:

Existem duas formas básicas de projeção: perspectiva e ortográfica. Na projeção perspectiva, há um (ou mais) pontos de fuga onde os raios de projeção se
concentram. Os efeitos decorrentes deste tipo de projeção são vários, como por exemplo a alteração do tamanho de objetos projetados na tela de acordo
com sua distância em relação à câmera e também o efeito paralaxe. Na projeção ortográfica, os raios de projeção são paralelos, removendo o efeito de
alteração de tamanho e paralaxe. Jogos 2D utilizam em geral uma projeção ortográfica (emulando o efeito paralaxe com deslocamento de planos
sobrepostos em velocidades diferentes), enquanto jogos em primeira pessoa usam projeção perspectiva.

Para atingir o objetivo no desenvolvimento de um projeto, não necessariamente o jogo deve ser 3D, pois, dependendo do caso, a experiência
atingida será mais satisfatória no âmbito bidimensional. Essa é uma avaliação importante no design de um jogo.

1.4.2 Implementações no plano 3D

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 13/16
12/12/2023, 13:08 Programação para jogos 3D
No caso de ambientes 3D, o desenvolvedor deve estar atento a não deixar os objetos muito alinhados. É preciso criar um pouco de
variabilidade nas rotações, posições e escalas de objetos, além de seguir um estilo visual coerente. Na figura “Cenário Cartoon Buildings
(Asset Store)”, é adotado um visual estilo cartum. Os modelos não estão muito alinhados, dando uma impressão de composição orgânica.

Figura 11 - Cenário Cartoon Buildings (Asset Store)


Fonte: Elaborada pelo autor, 2020.

#PraCegoVer: a imagem mostra um cenário 3D, em estilo cartum, com três construções: uma garagem, uma casa com antena parabólica e
um posto de gasolina.

No script apresentado na figura a seguir, “Alteração de escala do objeto entre 1 e 5”, é aplicada uma variabilidade com grau de aleatoriedade
no objeto, fazendo-o escalar nas dimensões X, Y e Z em um valor que varia entre 1 e 5. Para esse feito visual ficar adequado, naturalmente o
objeto a ser escalado deve ser adequado, sem apresentar distorções demasiadas na malha e na textura.

Figura 12 - Alteração de escala do objeto entre 1 e 5


Fonte: Elaborada pelo autor, 2020.

#PraCegoVer: o script modifica o tamanho dos objetos, ou seja, a escala, com o comando localScale. Os eixos X, Y e Z são modificados de
acordo com um sorteio individual para cada eixo com o valor entre 1 e 5.

O script ainda pode variar, como apresentado na figura seguinte, “Alteração de escala do objeto para todos os eixos”, aplicando uma mesma
escala em todos os eixos.

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 14/16
12/12/2023, 13:08 Programação para jogos 3D

Figura 13 - Alteração de escala do objeto para todos os eixos


Fonte: Elaborada pelo autor, 2020.

#PraCegoVer: o script modifica o tamanho dos objetos, ou seja, a escala, com o comando localScale. Os eixos X, Y e Z são modificados de
acordo com a variável scaleObj, que é sorteada entre 1 e o valor de uma segunda variável chamada maxScale.

A partir dos objetos definidos, o level design pode reaproveitar diversos modelos, posicionando-os com variabilidade de escala e rotação,
criando uma ilusão de variabilidade. Isso é uma técnica bastante comum em jogos e deve ser aplicada no contexto de desenvolvimento de
jogos 3D, visando reaproveitamento e agilidade no desenvolvimento.

Teste seus conhecimentos


(Atividade não pontuada)

Acompanhe o caso a seguir, em que o conhecimento em diferentes gêneros e estilos de jogos, além do domínio tecnológico, é essencial para
o direcionamento do projeto.

Caso
Em um projeto, o desenvolvedor de jogos Mark recebeu um valor bastante limitado em recursos financeiros e
um prazo relativamente curto para entregar um RPG, 8 meses. A demanda do cliente era um tanto confusa:
queria algo parecido com God of War, com características do jogo Diablo, mas que fosse tão divertido quanto
Pokémon.
Mark ouve com atenção a demanda e explica ao cliente que é muito caro e demorado fazer algo no nível de
God of War, especialmente com uma equipe reduzida e pouco orçamento. Apesar disso, o projeto pode ser
adaptado e o objetivo do cliente pode ser atingido.
Já que o cliente cita Pokémon como um exemplo, Mark utiliza esse ponto de vista como argumento e define o
escopo do projeto como um jogo 2D mais voltado ao estilo casual, o que viabiliza o projeto. Ele decide utilizar
o modo 2D da Unity para a implementação. Mesmo tendo recursos mais poderosos, o objetivo do
desenvolvedor deve ser cumprir o solicitado pelo cliente ou objetivo do projeto.

Por vezes, a definição do estilo de jogo, apesar de parecer ser mais adequada com o direcionamento do desenvolvedor, pode acabar por ter
contribuições relevantes por pessoas de fora da equipe. Nesse contexto, saber ouvir é uma importante habilidade para o desenvolvedor de
jogos.

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 15/16
12/12/2023, 13:08 Programação para jogos 3D

Conclusão
Concluímos a unidade e nela fomos capazes de aprofundar conhecimentos em motores de jogos
e construir exemplos de aplicação focados na engine Unity. Compreendemos o ambiente visual e
de programação, desenvolvendo scripts de programação. Realizamos a importação de objetos e
estudamos diretrizes iniciais de level design nos âmbitos 2D e 3D.
Nesta unidade, você teve a oportunidade de:

estudar o ambiente de desenvolvimento de jogos da Unity e compreender conceitos


generalistas de game engines;

implementar scripts de programação e estudar boas práticas de organização de projetos;

importar elementos 3D de NPCs e cenários para construção de level design;

desenvolver cenários bidimensionais e tridimensionais.

Referências
KYAW, A. et al. Unity 4. VIII Game AI Programming. United Kingdom: Packt Publishing, 2013.
MENARD, M.; WAGSTAFF, B. Game Development with Unity. Boston, USA: Cengage
Learning, 2014.
MENDES, D. D. M. et al. Processo de design de fases por lógica booleana para geração
procedural de conteúdos em jogos digitais. Proceedings of SBGames, Rio de Janeiro, out.
2019. Disponível em:
https://www.sbgames.org/sbgames2019/files/papers/ArtesDesignFull/198119.pdf
(https://www.sbgames.org/sbgames2019/files/papers/ArtesDesignFull/198119.pdf). Acesso
em: 10 dez. 2020.
SMITH, M.; QUEIROZ, C. Unity 4.VIII Cookbook. United Kingdom: Packt Publishing, 2013.

https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 16/16

Você também pode gostar