Escolar Documentos
Profissional Documentos
Cultura Documentos
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 1/22
12/12/2023, 13:08 Programação para jogos 3D
Introdução
Caro(a) estudante, estamos avançando em nossos estudos e agora
daremos mais um importante passo para o seu aprimoramento como
desenvolvedor de jogos. Nesta unidade, direcionaremos nossos estudos
para algoritmos de busca, que, dentre outras aplicações, são comumente
utilizados para criar trajetórias em jogos digitais, especialmente para traçar
caminhos de movimentação para personagens.
Existem muitos jogos que aplicam algoritmos de busca. Talvez o exemplo
mais comum seja aquele utilizado para que personagens não controláveis
(NPCs) sigam outros personagens ou pontos específicos do cenário.
Nesse contexto, as possibilidades de variabilidade podem ser infinitas.
Podemos trazer exemplos simples como o Pokémon Pikachu seguindo o
personagem Ash na versão amarela de Pokémon (Gameboy), ou trajetórias mais complexas, como os aliados e os inimigos em
Assassin's Creed, que traçam trajetórias complexas para navegar pela cidade, ao mesmo tempo que apresentam uma série de
algoritmos complexos, desde para determinar a tensão e a ansiedade até a percepção de risco nas proximidades, e assim
determinar ações específicas. Todos esses exemplos têm relação com algoritmos de busca, seja em jogos mais simples, seja em
jogos complexos.
Como estudante e futuro desenvolvedor de jogos, você deve estar pronto para aplicar algoritmos de busca em diferentes contextos,
em projetos pequenos e de escopo reduzido ou em projetos complexos e com grandes equipes.
Bons estudos!
O uso de algoritmos de busca é um campo com vastas aplicações e pesquisas na área de Ciência de Computação, incluindo o contexto de
jogos digitais. Essencialmente, um algoritmo de busca tem por objetivo retornar uma solução para um problema após resolver determinado
número de soluções, buscando alternativas e eficiência.
Traçando trajetórias
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 2/22
12/12/2023, 13:08 Programação para jogos 3D
Um dos pontos de destaque na aplicação de algoritmos de busca no âmbito de jogos digitais é a relação que apresentam com as game
engines. Osório et al. (2007, p. 1) afirmam que:
Em jogos digitais, o uso de técnicas de Inteligência Artificial (I.A.) vem se fazendo cada vez mais necessário, e sendo até mesmo indispensável em certos
casos. Estas técnicas podem ser aplicadas em diferentes tipos de tarefas: resolução de problemas (puzzles, brain-teasers), planejamento de tarefas,
planejamento de trajetórias, controle de agentes autônomos (NPCs — Non-Player Characters), entre outras diversas aplicações. Para que possamos integrar
técnicas de I.A. em jogos digitais, se faz necessária a inclusão de um novo componente em um motor de jogo (engine), além dos já tradicionais componentes
destas Engines de Jogos: motor gráficos, de áudio, de rede, de física, de controle de dispositivos de E/S (interação). Este componente é o motor de
Inteligência Artificial — I.A.
Não é novidade que a inteligência artificial faz parte dos jogos para diversos tipos de aplicação em diferentes gêneros. Assim, o estudo de
diferentes algoritmos de busca e suas aplicações é essencial para o desenvolvimento de um jogo com complexidade tecnológica necessária
para construir uma experiência satisfatória.
Você sabia?
A Unity possui em sua loja uma categoria exclusiva para inteligência
artificial, com recursos que podem ser aplicados diretamente na
engine. As soluções podem ser visualizadas no endereço a seguir.
https://assetstore.unity.com/tools/ai
(https://assetstore.unity.com/tools/ai)
Outro conceito relevante e comumente aplicado em engines, inclusive na Unity, é a aplicação de Máquinas de Estados Finitas (FSM).
Máquinas de Estados são estruturadas com base em comportamentos de elementos, com estados quantificáveis, ou seja, finitos. Um
exemplo comum de aplicação de FSM é o desenvolvimento do comportamento de inimigos. Veja a figura “Representação de Máquinas de
Estados Finitas dos fantasmas em PacMan”, que traz um exemplo de uso.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 3/22
12/12/2023, 13:08 Programação para jogos 3D
#PraCegoVer: na imagem são apresentados 3 círculos com possíveis ações: “Dispersar”, “Caçar” e “Fugir”. Cada ação apresenta uma
condição para ser alterada, que é representada em setas que ligam os círculos. As ações são verificação do tempo de dispersão do
fantasma, tempo de caça, tempo do jogador com energia e se o jogador pegou a energia.
É possível delimitar que o inimigo fica em estado de alerta, depois em estado agressivo, estado de fuga, de desespero, entre outros. Cada
um desses estados, por sua vez, é alterado e desencadeado por um critério, como exemplificado a seguir.
Alerta — Fuga
O inimigo pode passar de um estado de alerta para fuga quando o seu nível de vida ou energia estiver muito baixo
Desespero
Autodestruição
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 4/22
12/12/2023, 13:08 Programação para jogos 3D
inteligência artificial, é bastante usual essa relação.
#PraCegoVer: na imagem são apresentados dois cilindros que representam personagens, situados em um cenário com duas partes
principais ligadas por uma escada. Além da escada, na parte direita existe o formato de uma porta, duas rampas e um cubo que representa
um obstáculo.
Essa malha de navegação pode ter aplicação em diversos tipos de jogos e contextos.
Um exemplo bastante comum é situar inimigos que patrulham uma área predeterminada e que, ao visualizar
o jogador, podem mudar de estado com a estruturação em Máquinas de Estados Finitas e iniciar um ataque.
Mudança de estado e
Nesse contexto, quando em estado de patrulha, um inimigo poderia seguir a malha de navegação e o
ataque
sistema Navigation para patrulhar. Por outro lado, quando estiver em estado de ataque, não usaria mais a
malha de navegação como referência, mas se utilizaria de outros critérios para atacar.
Outro exemplo bastante comum de aplicação são personagens que se deslocam em grupo. Nesse contexto,
Deslocamento em grupo os personagens podem utilizar a área de navegação como referência, porém, podem ter o personagem
controlável como referência a ser seguida.
Outra possibilidade ainda é que o NPC que caminha junto com o personagem controlável seja um tipo de
NPC como guia
guia, podendo se deslocar e apontar caminhos ao jogador, ou ainda revelar itens escondidos, entre outros.
As possibilidades são infinitas e dependem de como o jogo foi projetado. Além das questões conceituais de game design, analisar
tecnicamente a aplicabilidade de algoritmos de navegação e busca, nativos nas engines ou não, requer também uma avaliação técnica —
realizada pelo desenvolvedor — da capacidade da plataforma em que o jogo será publicado. Silva e Villela (2016, p. 73) apontam que:
Dispositivos móveis geralmente têm capacidade de processamento e memória limitadas. Ao desenvolver para este tipo de dispositivo, o desenvolvedor deve
estar ciente dessas limitações. Por outro lado, desenvolver um aplicativo que usa técnicas de IA pode exigir muita memória e processamento por máquina,
dependendo da questão a ser tratada. Portanto, para desenvolver um jogo usando tais técnicas é necessário estabelecer um equilíbrio entre as limitações do
dispositivo móvel, a complexidade da técnica a ser implementada e a satisfação do usuário. Ou seja, o jogo desenvolvido pode não exigir muito
processamento de IA para ser capaz de jogar contra o usuário, e deve também trazer algum entretenimento para o jogador.
Apesar das diversas possibilidades de aplicação, essencialmente o que é utilizado nesse contexto é um algoritmo de busca que tem por
objetivo traçar a melhor trajetória e percorrer caminhos. A maioria das engines possuem sistemas similares ao Navigation e, apesar de suas
particularidades de aplicação, conceitualmente são muito similares.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 5/22
12/12/2023, 13:08 Programação para jogos 3D
Vamos Praticar!
Você foi designado para implementar um personagem NPC, que auxilia o jogador dando
dicas para encontrar tesouros e caminhos secretos. O contexto do jogo é a aplicação em
consoles portáteis, ou seja, com limitações no poder de processamento. Escreva no
mínimo dois parágrafos argumentando sobre quais as práticas e recursos adotados para
definir as diretrizes de implementação do personagem.
3.2 Algoritmo AB em
jogos
Uma estrutura bastante usual em jogos são as árvores binárias (árvores AB). Essas estruturas não são lineares, ou seja, podem ter uma
estruturação em que os elementos sucessores de cada uma de suas partes levam a diferentes caminhos. Essa variabilidade é importante
para a estruturação de possibilidades mais complexas de análise, que podem ser aplicadas para resolver problemas dentro do contexto de
desenvolvimento de jogos.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 6/22
12/12/2023, 13:08 Programação para jogos 3D
#PraCegoVer: é apresentada a primeira parte de um código em linguagem C em que são definidas duas structs: prêmio e prêmios
sorteados. O programa sorteia as informações dos prêmios sorteados e dentro dos prêmios criados, que no exemplo são 100, quais serão os
3 sorteados.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 7/22
12/12/2023, 13:08 Programação para jogos 3D
#PraCegoVer: é apresentada a segunda parte de um código em linguagem C em que são definidas duas structs: prêmio e prêmios
sorteados. O programa sorteia as informações dos prêmios sorteados e dentro dos prêmios criados, que no exemplo são 100, quais serão os
3 sorteados.
Esse exemplo não é tão simples de entender para quem não está habituado com linguagem C em ponteiros, mas é interessante observar o
que apresenta para compreender possíveis aplicações a partir do recurso utilizado.
1
Variáveis
Inicialmente, as structs apresentadas no código mostram as variáveis prêmio 1, 2 e 3, com um asterisco (*) entre o tipo e o nome.
2
Ponteiro
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 8/22
12/12/2023, 13:08 Programação para jogos 3D
Esse asterisco determina que a variável é um ponteiro, ou seja, ela não armazena um simples número, mas sim uma posição de memória.
3
Apontamento
Nesse código de exemplo, foram criados 100 prêmios, e dentre os 100, 3 receberão o apontamento da struct.
4
Mudança de apontamento
Se for o desejo do desenvolvedor, esses apontamentos podem mudar, e até mesmo 2 ou 3 desses podem apontar para o mesmo prêmio.
Você o conhece?
Conheça Alberto Braga, um game designer brasileiro que já atuou em estúdios ao redor do mundo,
principalmente na Europa e Canadá. Assim como Alberto, é importante que todos os desenvolvedores de
jogos tenham seu portfólio organizado, e Alberto o deixa atualizado até hoje. Saiba mais sobre a sua
história no link (em inglês).
Acesse (http://www.albertobraga.com/)
A partir do domínio do uso de ponteiros, podem ser implementadas estruturas de dados com as árvores binárias. Uma árvore é uma estrutura
dividida em nodos ou nós, iniciando por um nodo raiz que terá sua continuidade através dos filhos desse nodo raiz, como apresentado na
figura “Árvore de estados (configurações) do tabuleiro no Jogo da Velha”.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B4… 9/22
12/12/2023, 13:08 Programação para jogos 3D
#PraCegoVer: é apresentada a figura de uma árvore que representa as possíveis alternativas no jogo da velha, iniciando com o tabuleiro
vazio e passando para 9 possíveis estados, que são as 9 possíveis posições nas quais o “X” pode ser colocado. Após as 9 possíveis
posições, são apresentadas novas possibilidades de avanço das jogadas.
No exemplo do jogo da velha, o nodo raiz apresenta 9 filhos. Quando cada nodo pode ter no máximo 2 filhos, a estrutura é denominada
árvore binária, ou AB. A figura “Exemplo de estruturação de árvore binária” apresenta como essa estrutura pode ser constituída em linguagem
C.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 10/22
12/12/2023, 13:08 Programação para jogos 3D
#PraCegoVer: é apresentado um código em linguagem C com uma struct apresentando 2 ponteiros que definem os dois nodos filhos, além
de uma variável char para representar a informação de cada nodo. Após a struct, são escritas funções para inserir os nodos e formar a
árvore.
O código apresentado como exemplo de estruturação de árvores constrói a estrutura pelo critério de verificação do valor: se o valor de um
novo nodo (ou folha, no contexto de árvores), for menor que o valor do nodo pai, a nova folha é situada na esquerda. Caso seja maior, é
situado na direita. Assim, a árvore cresce sempre com esses dois critérios, dado que cada nodo pode ter apenas dois filhos.
Você sabia?
É comum em jogos a criação das estruturas chamadas “árvores de
comportamentos” ou “behavior trees”. A Asset Store da Unity apresenta uma
solução para o uso relativamente acessível desse recurso no link a seguir.
https://assetstore.unity.com/packages/tools/visual-scripting/behavior-
designer-behavior-trees-for-everyone-15277
(https://assetstore.unity.com/packages/tools/visual-scripting/behavior-
designer-behavior-trees-for-everyone-15277)
Para percorrer uma árvore, existem diversas estratégias e algoritmos. A figura “Formas de caminhamentos em árvores binárias” apresenta
três alternativas: caminhamento em pré-ordem, em ordem e em pós-ordem. Para melhor visualização, o código foi dividido em cinco partes.
#PraCegoVer: é apresentada a primeira parte de um código em linguagem C com uma struct apresentando 2 ponteiros que definem os dois
nodos filhos, além de uma variável char para representar a informação de cada nodo. São apresentadas também funções de caminhamento
da árvore em 3 tipos: ordem, pré-ordem e pós-ordem, além de uma função de busca para verificar se determinada informação consta na
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 11/22
12/12/2023, 13:08 Programação para jogos 3D
árvore.
#PraCegoVer: é apresentada a segunda parte de um código em linguagem C com uma struct apresentando 2 ponteiros que definem os dois
nodos filhos, além de uma variável char para representar a informação de cada nodo. São apresentadas também funções de caminhamento
da árvore em 3 tipos: ordem, pré-ordem e pós-ordem, além de uma função de busca para verificar se determinada informação consta na
árvore.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 12/22
12/12/2023, 13:08 Programação para jogos 3D
#PraCegoVer: é apresentada a terceira parte de um código em linguagem C com uma struct apresentando 2 ponteiros que definem os dois
nodos filhos, além de uma variável char para representar a informação de cada nodo. São apresentadas também funções de caminhamento
da árvore em 3 tipos: ordem, pré-ordem e pós-ordem, além de uma função de busca para verificar se determinada informação consta na
árvore.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 13/22
12/12/2023, 13:08 Programação para jogos 3D
#PraCegoVer: é apresentada a quarta parte de um código em linguagem C com uma struct apresentando 2 ponteiros que definem os dois
nodos filhos, além de uma variável char para representar a informação de cada nodo. São apresentadas também funções de caminhamento
da árvore em 3 tipos: ordem, pré-ordem e pós-ordem, além de uma função de busca para verificar se determinada informação consta na
árvore.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 14/22
12/12/2023, 13:08 Programação para jogos 3D
#PraCegoVer: é apresentada a quinta parte de um código em linguagem C com uma struct apresentando 2 ponteiros que definem os dois
nodos filhos, além de uma variável char para representar a informação de cada nodo. São apresentadas também funções de caminhamento
da árvore em 3 tipos: ordem, pré-ordem e pós-ordem, além de uma função de busca para verificar se determinada informação consta na
árvore.
As três funções apresentadas, apesar de varrerem a estrutura, realizam a operação com diferentes critérios.
O desenvolvedor deve adotar uma ou mais estratégias, dependendo do objetivo da árvore dentro da programação do jogo.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 15/22
12/12/2023, 13:08 Programação para jogos 3D
Em alguns casos, o uso de recursos para aplicação de inteligência artificial apresenta um elevado custo computacional. No caso de jogos
que possuem recursos gráficos avançados, isso pode ser bastante crítico, pois levará a uma necessidade de processamento simultâneo de
vários recursos, como renderização complexa e IA complexa. Nesse sentido, as Máquinas de Estados Finitas (FSM) podem ser uma
alternativa para chegar ao resultado pretendido na implementação sem um alto custo computacional.
2) Avançar contra o jogador para provocar uma colisão.
Esse padrão se repete em inúmeros jogos, e não somente em títulos do gênero space-shooter. Ainda é comum que um último estado seja o
inimigo entrar em estado crítico, em geral quando está quase morrendo, em que fica mais agressivo e com ataques diferenciados. Assim, são
observados dois fatores relevantes: a definição de estados bem definidos, que delimitarão as ações do personagem em cada momento, e a
análise de variáveis e eventos que serão os critérios para mudança de estados.
Você sabia?
O sistema Play Maker pode ser encontrado na Asset Store no
link a seguir.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 16/22
12/12/2023, 13:08 Programação para jogos 3D
https://assetstore.unity.com/packages/tools/visual-
scripting/playmaker-368
(https://assetstore.unity.com/packages/tools/visual-
scripting/playmaker-368)
Esse sistema não atende todas as necessidades para desenvolver um jogo, mas pode atender uma parte considerável delas, acelerando o
desenvolvimento para quem não possui conhecimentos avançados em programação.
Vamos Praticar!
Você está desenvolvendo um jogo e, apesar de ter certo conhecimento em programação, precisa
contar com dois colegas de trabalho que não possuem conhecimentos avançados em programação.
Pelo escopo do projeto, você acredita que não precisará programar com scripts C# na engine Unity
e que uma ferramenta visual chamada Play Maker poderá ser o suficiente. Escreva, em ao menos
dois parágrafos, a razão de, para esse projeto, ser mais coerente usar o Play Maker e, ainda,
quando a ferramenta visual pode não ser o suficiente, exigindo o desenvolvimento de scripts com
códigos.
3.4 Algoritmo
A*
O chamado algoritmo A* (A Star) é bastante utilizado no contexto de desenvolvimento de jogos para traçar trajetórias, algo que está
diretamente ligado ao comportamento de NPCs, por exemplo. Rabin (2015) afirma que o primeiro passo na busca por caminhos consiste em
analisar o ambiente em que o personagem está inserido para, em seguida, determinar a área de busca. É um processo relativamente similar
ao que acontece quando se utiliza um Nav Mesh na Unity.
3.4.1 Conceito de A*
Para uma adequada utilização do algoritmo A*, é preciso definir o custo estimado de um caminho e o custo do caminho percorrido. Osório et
al. (2007, p. 4-5) afirmam que:
A ideia inicial do A* é a composição de dois custos a fim de compor a heurística aplicada na restrição do espaço de busca (direcionamento da busca),
compondo uma função f(x) = g(x) + h(x). A primeira parte da função, g(x), é custo propriamente dito do caminho percorrido, ou seja, é quanto custa para o
agente se mover para o nó em questão. […] Este custo pode estar representando qualquer propriedade consumida pelo agente, como por exemplo: tempo,
equipamentos, distância, combustível gasto, etc. […] A heurística base do A* é a soma do custo de caminho (já percorrido), com o custo estimado do caminho
(que ainda falta percorrer), dando como resultado um custo total estimado para alcançar o nó em questão.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 17/22
12/12/2023, 13:08 Programação para jogos 3D
Assim, o A* busca encontrar o caminho ótimo ou menos custoso, realizando essas estimativas numéricas. Em alguns casos específicos, o
desenvolvedor pode propositalmente aplicar o A* para não encontrar o caminho mais otimizado. Essa decisão não é a mais usual, mas no
contexto de jogos digitais pode ocorrer.
Trajetórias
A partir da aplicação do A*, digamos que um sistema de GPS calcula 5 trajetórias com
diferentes custos.
Nível normal
Talvez o jogo em nível normal sorteie a trajetória de um inimigo dentre os 3 maiores custos.
Nível difícil
E o jogo em nível difícil sorteie entre os 2 outros caminhos, que são mais próximos ao
“caminho ótimo”.
Assim, é notável que em jogos não se busca sempre a melhor ou ótima solução, mas aquela que construirá a experiência desejada, que
pode nem sempre ser a mais eficiente contra o jogador, mas será aquela que divertirá mais.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 18/22
12/12/2023, 13:08 Programação para jogos 3D
#PraCegoVer: é apresentada a primeira parte de um código em linguagem C# no contexto da Unity, no qual é definido um ponto a ser
perseguido pelo personagem em que o script será aplicado. Adicionalmente, há uma função chamada OnPathComplete que é chamada
quando o caminho for percorrido.
#PraCegoVer: é apresentada a segunda parte de um código em linguagem C# no contexto da Unity, no qual é definido um ponto a ser
perseguido pelo personagem em que o script será aplicado. Adicionalmente, há uma função chamada OnPathComplete que é chamada
quando o caminho for percorrido.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 19/22
12/12/2023, 13:08 Programação para jogos 3D
A seguir, veremos a última parte do código.
#PraCegoVer: é apresentada a terceira parte de um código em linguagem C# no contexto da Unity, no qual é definido um ponto a ser
perseguido pelo personagem em que o script será aplicado. Adicionalmente, há uma função chamada OnPathComplete que é chamada
quando o caminho for percorrido.
Acompanhe o caso a seguir, que mostra que adotar as corretas estratégias para a implementação de IA pode fazer a diferença para a
viabilidade de um projeto.
Caso
A maioria dos jogos digitais são desenvolvidos em plataformas usuais como PC, consoles (PlayStation, Xbox,
Wii), consoles portáteis ou dispositivos móveis na categoria de smartphones. Em determinado momento, Júlio
se depara com uma situação inusitada: desenvolver um jogo com a temática de um shopping em que há um
arcade, com várias máquinas de jogos populares. O grande desafio é que o desenvolvimento deve ocorrer em
um hardware próprio, no qual Júlio nunca trabalhou.
Júlio recebe o hardware: é uma variação do Arduíno, importada e com pouca memória disponível, apesar de
ter um poder de processamento gráfico relativamente bom, sendo suficiente para executar um jogo com
gráficos não muito avançados. A determinação do cliente é clara: é preciso ter um diferencial na inteligência
artificial, preferencialmente com algo avançado como algoritmos genéticos!
O cliente não possui conhecimentos técnicos para avaliar a melhor abordagem para o caso, então Júlio chega
à conclusão de que somente um protótipo pode salvar o projeto.
Então, Júlio prepara em 2 dias um demo com cubos e sem nenhuma textura. Em uma parte, aplica algoritmos
genéticos extremamente custosos que deixam o jogo lento. Depois, apresenta uma dinâmica com Máquinas
de Estados simples e que parecem ser bastante divertidas.
O cliente, que parecia irredutível, defende a nova solução adotando FSM.
Em alguns momentos, é preciso mostrar com interação. Nesse sentido, quanto antes existir um protótipo,
melhor.
Mesmo em soluções de terceiros, a aplicabilidade do A* irá variar de jogo para jogo. Afinal, após definir uma trajetória, completá-la ou ter de
modificá-la ao longo de sua execução, são particularidades de cada jogo e contexto.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 20/22
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.
Nesta unidade, você teve a oportunidade de:
Referências
A* PATHFINDING PROJECT. Example AstarAI.cs 4.1.16, [S. l.], 2021. Disponível em:
https://arongranberg.com/astar/documentation/4_1_16_7f164ebc/astaraics.html
(https://arongranberg.com/astar/documentation/4_1_16_7f164ebc/astaraics.html). Acesso
em: 5 jan. 2021.
A* Pathfinding Project Pro. [S. l. s. n.], 2015. 1 vídeo (2 min). Publicado pelo canal Aron G.
Disponível em: https://youtu.be/hmx1sx6ezQA (https://youtu.be/hmx1sx6ezQA). Acesso
em: 5 jan. 2021.
AI para inimigos em Plataformas — Construct 2 e Construct 3 — Cloud5. [S. l. s. n.], 2019. 1
vídeo (11 min). Publicado pelo canal desKompliKa Cursos. Disponível em: https://youtu.be/5JVg4B1kk24
(https://youtu.be/5JVg4B1kk24). Acesso em: 5 jan. 2021.
BRAGA. A. Showcase. Alberto Braga, [S. l.], [202-?]. Disponível em: http://www.albertobraga.com/
(http://www.albertobraga.com/). Acesso em: 5 jan. 2021.
COPPIM, B. Inteligência artificial. Rio de Janeiro, LTC, 2013.
KYAW, A. et al. Unity 4. VIII Game AI Programming. United Kingdom: Packt Publishing, 2013.
LIMA, E. S. de Inteligência artificial: aula 26 — Máquinas de estados finitos. Edirlei Lima, Lisboa, 2012. Disponível em:
https://edirlei.com/aulas/ia_2012_1/IA_Aula_26_Maquinas_de_Estados_Finitos.pdf
(https://edirlei.com/aulas/ia_2012_1/IA_Aula_26_Maquinas_de_Estados_Finitos.pdf). Acesso em: 9 dez. 2020.
MULLER, A., BITTENCOURT, J. UD3 — Unity decision tree integrator: uma extensão de árvores de decisão para Unity. In:
SBGames, 13., 2014, Porto Alegre. Anais […]. Porto Alegre: Proceedings of SBGames, 2014. Disponível em: h
(https://www.sbgames.org/sbgames2014/papers/computing/short/20_allcomputingshortpages.pdf)ttps://www.sbgames.org/s
bgames2014/papers/computing/short/20_allcomputingshortpages.pdf
(https://www.sbgames.org/sbgames2014/papers/computing/short/20_allcomputingshortpages.pdf). Acesso em: 15 dez. 2020.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 21/22
12/12/2023, 13:08 Programação para jogos 3D
OSÓRIO, F. et al. Inteligência Artificial para Jogos: agentes especiais com permissão para matar… e raciocinar!. Proceedings of
SBGames, São Leopoldo, RS, 2007. Disponível em: http://osorio.wait4.org/publications/Osorio-et-al-SBGames07-Tutorial.pdf
(http://osorio.wait4.org/publications/Osorio-et-al-SBGames07-Tutorial.pdf). Acesso em: 15 dez. 2020.
RABIN, S. (ed.). Game AI pro 2: collected wisdom of game AI professionals. Boca Raton, USA: CRC Press, 2015.
SILVA, P.; VILLELA, S. Applying pathfinding techniques on the development of an Android game. In: SBGames, 15., 2016, São Paulo.
Anais […]. São Paulo: Proceedings of SBGames, 2016. Disponível em:
http://www.sbgames.org/sbgames2016/downloads/anais/157460.pdf
(http://www.sbgames.org/sbgames2016/downloads/anais/157460.pdf). Acesso em 17 dez. 2020.
SMITH, M.; QUEIROZ, C. Unity 4.VIII Cookbook. United Kingdom: Packt Publishing, 2013.
UNITY Playmaker tutorial 01. [S. l. s. n.], 2016. 1 vídeo (8 min). Publicado pelo canal Blender Nitidus. Disponível em:
https://youtu.be/mpdNMU0H5AY (https://youtu.be/mpdNMU0H5AY). Acesso em: 5 jan. 2021.
UNITY. Behavior Designer — Behavior Trees for Everyone. Asset Store, [2021]. Disponível em:
https://assetstore.unity.com/packages/tools/visual-scripting/behavior-designer-behavior-trees-for-everyone-15277
(https://assetstore.unity.com/packages/tools/visual-scripting/behavior-designer-behavior-trees-for-everyone-15277). Acesso
em: 5 jan. 2021.
UNITY. Navigation and pathfinding. Unity User Manual 2019.4 LTS, [S. l.], 2021. Disponível em:
https://docs.unity3d.com/Manual/Navigation.html (https://docs.unity3d.com/Manual/Navigation.html). Acesso em: 5 jan. 2021.
UNITY. Playmaker. Asset Store, [S. l.], [2021]. Disponível em: https://assetstore.unity.com/packages/tools/visual-
scripting/playmaker-368 (https://assetstore.unity.com/packages/tools/visual-scripting/playmaker-368). Acesso em: 5 jan. 2021.
UNITY. Tools/AI. Asset Store, [S. l.], [2021]. Disponível em: https://assetstore.unity.com/tools/ai
(https://assetstore.unity.com/tools/ai). Acesso em: 5 jan. 2021.
VOCÊS pediram Kasparov x Deep Blue (1996) — Partida 01/06. [S. l. s. n.], 2018. 1 vídeo (16 min). Publicado pelo canal Xadrez
Brasil. Disponível em: https://youtu.be/tEC9umM_y5A (https://youtu.be/tEC9umM_y5A). Acesso em: 5 jan. 2021.
https://student.ulife.com.br/ContentPlayer/Index?lc=uy4Ru0c1rbtg%2bZ6D%2fcLmFw%3d%3d&l=o0iDOtLh81rsO9ClfYRYHQ%3d%3d&cd=B… 22/22