Buscar

Desenvolvimento de Jogos Digitais - Parte 2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 163 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 163 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 163 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Desenvolvimento de Jogos Digitais II
Aula 1: Histórico e Ferramentais
História dos Jogos Digitais
O que é jogo digital?
Um jogo digital pode ser definido como um jogo projetado para ser utilizado a partir de um computador, console ou dispositivo móvel, entre outras plataformas eletrônicas. Está inserido na cultura de massa desde a popularização dos consoles de videogames, como o Atari Video Computer Systems (Atari VCS).
1980
Na década de 1980 algumas empresas de jogos apresentaram um crescimento notório, como Nintendo, Sega e Konami, chamando a atenção, já nessa época, para um pretenso mercado que veio a tornar-se muito lucrativo pouco tempo depois.
1983
Em 1983 foi anunciado o MSX, computador que apresentava características mistas. Para os padrões de hardware da época, era uma boa opção de computador pessoal, ao mesmo tempo em que trazia elementos específicos, como o uso de cartuchos, que o tornaram amplamente utilizável como plataforma de jogos.
1986
Apesar disso, os computadores não se destacavam no mercado de jogos, pois os consoles continuaram a evoluir, como o NES, que cresceu no mercado americano em 1986, trazendo novos dispositivos de entrada, como a pistola para jogos de tiro.
1994-1996
Ao longo da constante guerra que se travava por qualidade gráfica, entre 1994 e 1996 surgem os consoles Sega Saturn, PlayStation e Nintendo 64. A característica mais marcante da época foi a de que computadores e consoles começaram a evoluir para plataformas de 64 bits.
Em meio a toda a disputa entre as plataformas, os portáteis surpreendem, ganhando grande relevância com o lançamento, em 1998, do Game Boy Color, o qual trouxe a série Pokémon.
A ideia de poder jogar em qualquer lugar agradou ao público, de forma geral, e diversas outras iniciativas ocorreram, como o surgimento posterior do PlayStation Portable, ou PSP. Porém, os dispositivos portáteis nunca apresentaram o mesmo poder gráfico dos consoles, o que não impediu que a adoção deles trouxesse um panorama bastante consolidado para a era dos smartphones, que se iniciaria alguns anos depois.
2000
Na década de 2000 surge a sexta geração de consoles, trabalhando com 128 bits, a exemplo do Sega Dreamcast e o PlayStation 2. Foi um momento da história dos jogos digitais, quando os consoles realmente mostraram o seu poder frente aos computadores, e claro que a guerra não cessou por aí. Os computadores continuaram a evoluir, fazendo com que as placas gráficas se tornassem um diferencial em termos de configuração da plataforma.
2004
Em 2004 os dispositivos portáteis são marcados pelo surgimento do Nintendo DS e do PSP, duas plataformas com alto poder de processamento, mesmo que inferiores às dos consoles, e que trouxeram muitas inovações. Um bom exemplo foi a possibilidade de trabalhar com duas telas, oferecida pelo Nintendo DS — um produto que evoluiu consideravelmente ao longo do tempo, e que chegou a utilizar um modelo de visualização 3D no Nintendo 3DS.
Ao mesmo tempo em que os PCs traziam placas gráficas e processadores cada vez mais poderosos, os consoles também evoluíram, surgindo o MicrosoftXbox e o NintendoWii.
Em paralelo são popularizados os smartphones e tablets, passando a constituir um mercado muito expressivo na área de jogos digitais. Inicialmente com produtos baseados em tecnologia Java, por meio do Java Micro Edition (JME), as plataformas móveis evoluíram, surgindo sistemas como Android e iOS, os quais se modificam a cada dia, juntamente com o hardware dos dispositivos, e o que eram apenas pequenos jogos, inspirados na era do Atari, evoluíram para produtos no modelo 3D,com alta qualidade gráfica.
Atualmente
Hoje temos um ambiente composto de diversos tipos de dispositivos e o uso cada vez mais intensivo de conectividade, quando os jogadores, a partir de consoles, computadores e até dispositivos móveis, compartilham ambientes comuns na internet para efetuar partidas em conjunto, muitas vezes em plataformas heterogêneas. Paralelamente, os grandes fabricantes constroem suas redes próprias para vender os jogos e permitir a interatividade dos jogadores, como no caso da PlayStation Network e do Xbox Live.
Projeto de Jogos Digitais
O planejamento de um jogo começa com pequenos conceitos, que são expandidos a partir de reuniões de brainstorm, quando nenhuma ideia é descartada até que todos os elementos se consolidem na espinha dorsal do jogo. Ao esboçar ideias, é interessante a construção de mapas mentais (Mind Map), um tipo de diagrama utilizado para gestão de informações relevantes e relacionamentos, visando a compreensão e a solução de problemas.
Narrativa
É fato que a narrativa é um elemento essencial para um jogo digital, podendo ser apresentada em primeira ou terceira pessoa, sendo composta por cinco partes:
	Componente
	Descrição
	Enredo
	
Conteúdo sobre o qual a história é constituída, definindo todos os fundamentos e conflitos existentes na dinâmica do jogo.
	Personagens
	
Atores que devem interagir, no decorrer do jogo, de forma a construir a história definida no enredo.
	Espaço
	
Define o lugar físico do jogo, ambiente onde os personagens habitam e realizam suas ações.
	Tempo
	
É o controle da duração das ações da narrativa, e de como os fatos se desenrolam a partir de uma sequência determinada.
	Clímax
	
Normalmente ocorre próximo ao final do jogo, definindo o momento crítico da história, concluindo os conflitos dos personagens.
Para muitos autores, o personagem é o fundamento essencial de um roteiro, alma e sistema nervoso de uma história, sendo amado ou odiado devido à sua personalidade e participações em diferentes momentos da história.
Antes de colocar uma palavra no papel, é preciso conhecer muito bem o personagem.
O personagem pode assumir as mais diversas formas, e quase sempre esteve presente nos jogos digitais. Um passo significativo para sua criação consiste na definição de sua necessidade dentro do enredo.
Roteiro preliminar
Após formatar a ideia central de um jogo digital, o passo seguinte é a formatação de um roteiro preliminar (também conhecido como story line). É claro que surge a necessidade de entender quem são os personagens integrantes do roteiro, qual a participação de cada um na story line, bem como as relações entre diferentes personagens.
Com a grande diversidade de jogos, ocorreu a necessidade de classificá-los e agrupá-los em gêneros bem definidos, visando o direcionamento para o público correto. Duas tipologias principais são adotadas no mercado de jogos: GRAELLS e BECTA.
Tipologia de GRAELLS
A tipologia de GRAELLS (2000) considera a estrutura dos jogos e as principais competências mobilizadas pelo jogador no desenrolar da história, ou seja, a psicomotricidade, o raciocínio, a lógica, a estratégia e a memória.
	Gênero
	Competência(s)
	Exemplos
	Arcade
	Psicomotricidade
	PacMan, Sonic, Doom.
	Esportes
	Psicomotricidade
	Formula I GrandPrix, FIFA, NBA.
	Aventura
	Psicomotricidade
	Indiana Jones, Tomb Raider, Final Fantasy.
	Construtores e Simuladores
	Psicomotricidade
	The Sims, Spore.
	Estratégia
	Raciocínio, Estratégia e Lógica
	World of Warcraft, Civilization.
	Puzzles e Lógica
	Raciocínio, Estratégia, Memória e Lógica
	Tetris, Jogos de Cartas.
	Perguntas
	Estratégia, Memória e Lógica
	Quis, Trivia.
Tipologia de BECTA
Quanto à tipologia de BECTA (2003), ela define uma classificação dos jogos digitais em termos de estilos, narrativas, temáticas e atividades.
Tipologia de BECTA
Quanto à tipologia de BECTA (2003), ela define uma classificação dos jogos digitais em termos de estilos, narrativas, temáticas e atividades.
	Gênero
	Característica
	Exemplos
	Ação e Aventura
	Combate e exploração.
	Tomb Raider, Indiana Jones.
	Luta
	Enfrentamento direto.
	WWF Wrestle Mania, Tekken.
	FPS
	Tiro em primeira pessoa.
	Halo, Doom.
	Gestão
	Gestão de recursos.
	City Trader, Zoo Tycoon.
	Plataforma
	Uso de plataformas e coleta de itens.
	Super Mario, Sonic.
	Corridas
	Corridas com maior ou menor realismo.
	Formula I GrandPrix, Wipeout, Gran Turismo.
	RTS
	Estratégia em tempo real.Command and Conquer, Sudden Strike.
	RPG
	Exploração e representação de papéis.
	Fallout, Baldur’s Gate.
	Simulação
	Elementos do mundo real.
	Flight Unlimited, Train Simulator.
	Construção de Mundos
	Modelagem de ambientes.
	The Sims, Spore.
Game Design Document
Com as ideias já formuladas sobre gênero, narrativa, personagens e outros itens esboçados em mãos, o próximo passo é a definição de um GDD, ou Game Design Document, que trata do agrupamento dos diversos elementos do jogo em um único documento, funcionando como a espinha dorsal do projeto.
Elementos componentes de um GDD
Apesar de ter grande liberdade com relação ao formato, os elementos componentes de um GDD normalmente incluem:
· CONCEITO - Nome do jogo, apresentação resumida, público-alvo, estilo de jogo, história e principais regras.
· ESPECIFICAÇÕES TÉCNICAS - Sistema operacional, hardware mínimo, requisitos de software, bem como recursos gráficos.
· ESPECIFICAÇÕES DO JOGO - Fases, níveis de dificuldade, modo de jogo, pontuação e ranking, número de jogadores, save games, visão de câmera, personagens, itens de jogo e cenário, evolução e mensagens.
· DISPOSITIVOS DE ENTRADA - Suporte a mouse, uso de teclado e joystick, toque de tela, controle de menu, teclas e botões utilizados.
· DESIGN GRÁFICO E ARTE - Abertura, layout de menus e telas, definição de fases e layout do jogo em cada fase.
· SONORIZAÇÃO – Música ambiente nos menus e em cada fase, além de efeitos sonoros para as diversas ações e interações com itens do jogo.
· DESENVOLVIMENTO - Planejamento envolvendo as tarefas em termos de tempo, recursos e metas.
· DESIGN PARA O TIPO DE JOGO - Caracterização do tipo de jogo, bem como a definição da ação em terceira ou primeira pessoa.
· ENREDO E ROTEIRO - Jogos com características de RPG possuem enredos que se desenvolvem durante o jogo, e acontecimentos relevantes devem ser registrados.
· CARACTERÍSTICAS GRÁFICAS - Informações acerca da composição de cenários e modo de desenho, incluindo tipo de iluminação e estilo de sombreamento.
· CONCEITO GRÁFICO - Arte conceitual do projeto e dos mais diversos elementos, como personagens, itens e cenários.
· INFORMAÇÕES PARA PROGRAMAÇÃO - Capacidade mínima de processamento para o ambiente de programação, incluindo quantidade de memória, tipo processador e modelo de placa de vídeo.
· TIPOS DE MAPA - Pode ser um mapa simples, visão isométrica, ou outro, dependendo do tipo de jogo.
· PROPRIEDADES DAS ENTIDADES - Propriedades obrigatórias de cada entidade do jogo.
Após o nascimento da ideia por trás de um jogo digital e todos os processos envolvendo elementos conceituais e diretrizes artísticas, até a concepção de um GDD, inicia-se o processo de desenvolvimento do jogo em si.
Uma ferramenta muito facilitadora nessa fase inicial é o Storyboard, por meio do qual os artistas irão demonstrar os textos do roteiro a partir de imagens, simulando a ação dentro do jogo.
Tendo o Storyboard como um guia para a produção, ocorre agora a preocupação com a área gráfica (GFX) e com uso de som do jogo (SFX). Considerando-se o GFX, ele deve levar em conta o tipo de ambiente a ser utilizado, podendo ser 2D ou 3D, enquanto para o SFX todos os sons devem ser contemplados, desde um simples tiro, passos, música e até voz sintetizada, podendo contar com sons planos ou espaciais.
Modelagem de Jogo Digital
Diversas ferramentas são utilizadas na fase de desenvolvimento, como softwares de modelagem 2D e 3D, mas a principal, que se tornará responsável por agrupar todos os demais elementos e construir a lógica do jogo por meio de uma linguagem de programação, é a Game Engine, ou Motor de Jogo.
O surgimento das Game Engines trouxe outra abordagem na criação de jogos em que, em vez de se utilizar a linguagem como base de desenvolvimento e as bibliotecas como apoio, utiliza-se um ambiente completo de desenvolvimento visual e uma ou mais linguagens são adotadas como apoio na definição das ações do jogo.
Componentes do Motor de Jogo
Entre os componentes de um Motor de Jogo, é comum encontrar:
· Sistema de desenho 2D e 3D, normalmente apresentando suporte a tecnologias como DirectX e OpenGL;
· Sistema para controle de física e colisão, em que a incorporação de PhysX viabiliza o uso de efeitos extremamente realistas;
· Suporte para animação, contando com linhas de tempo e máquinas de estado visuais, permitindo utilizar transformações lineares e criação quadro-a-quadro;
· Gerência de áudio, englobando diversos formatos e incorporando o uso de tecnologias como Direct Sound;
· Sistemas de inteligência artificial, em que muitos deles são integrados ao ambiente de criação visual, como o Navigation Mesh;
· Elementos de conectividade, permitindo a definição de sistemas de rede próprios, ou integrados a plataformas existentes, como Play Station Network e Xbox Live;
· Controles para cenas e entidades, além de bibliotecas para a criação de interfaces de usuário, as quais viabilizam a construção de menus e sistemas de acompanhamento visual das informações no decorrer do jogo;
· Gerência de memória e arquivos, o que é particularmente necessário para a definição de save points e save games;
· Suporte à programação, tendo como exemplos o uso de C#, na Unity 3D, e de C++, na Unreal Engine.
Existem diversos fornecedores atualmente no mercado, sendo algumas das Game Engines mais relevantes Unreal Engine, Unity 3D, Cry Engine, Java Monkey, Blender Game Engine, entre diversas outras.
Ao analisar qualquer um desses produtos, devemos levar em consideração aspectos como qualidade gráfica e sonora, facilidade de desenvolvimento, compatibilidade com outras ferramentas, bibliotecas disponíveis, suporte à programação e ambiente de teste.
Modelagem 3D
Considerando elementos 3D, eles apresentam uma complexidade maior do que o ambiente 2D, pois trabalham com efeitos de iluminação e texturização em tempo real, diferentemente de um vídeo, em que a renderização ocorre toda antes da exposição da animação, ou o uso de Sprites, onde ocorre a animação quadro-a-quadro com o uso de figuras geradas previamente.
A modelagem dos elementos 3D pode ser feita com ferramentas diversas, a exemplo do Blender, 3DS Max, Maya, ZBrush, entre várias outras, e o processo inicia-se com a construção de uma malha, sobre a qual serão dispostos materiais e texturas, utilizando-se ao final elementos de iluminação sobre o conjunto.
Como nos jogos 3D ocorre o processamento dos gráficos em tempo real, a preocupação com a quantidade de polígonos e complexidade dos materiais utilizados é premissa básica para a obtenção de fluidez na execução do jogo.
Durante o processo de modelagem, é comum a utilização de um Model Sheet, tratando de um conjunto de visões (superior, frontal, lateral) do personagem, concebido de forma artística para viabilizar a modelagem computacional.
Quando trabalhamos com essas malhas e materiais, o maior custo computacional em termos de 3D é com relação à qualidade da imagem final no processo conhecido como renderização. O termo shading, ou sombreamento, refere-se ao nível de detalhamento e de percepção de profundidade em ilustrações e modelagens 3D.
1. Apesar de utilizarmos a iluminação e as câmeras do ambiente de modelagem 3D, elas não serão absorvidas pela Game Engine, servindo apenas para testes, sendo aproveitados de fato os elementos estruturais dos sólidos, como malhas, materiais e relações hierárquicas entre componentes.
2. A configuração da iluminação e do uso de câmeras será efetuada a partir dos componentes fornecidos pelo ambiente de criação de cenários da Game Engine, pois será o motor gráfico dela que ficará responsável pela renderização de cada quadro no decorrer da execução do jogo. Nesse ponto é fundamental observar elementos como a quantidade de polígonos na malha e a capacidade de processamento das GPUs presentes na placa de vídeo.
Bones¹: São criadas as chaves de animação, ao longo da linha de tempo, para os diversos componentes da hierarquia, e a malha é aplicada sobre ela, adequando-se ao movimento esperado — como ocorre paranós, quando nossos esqueletos se movem e a pele segue o movimento que foi imposto.
Ferramentas como a Unity 3D e a Unreal Engine conseguem importar, além dos modelos 3D, toda a estrutura de bones e animação gerada para elas, além de animações comuns, baseadas em simples transformações lineares sobre o objeto como um todo.
Como um personagem apresenta diferentes estados durante sua utilização no jogo, cada um deles corresponde a uma animação específica, como correr, andar e pular. A alteração do estado corrente deverá ser controlada via programação ou por gerenciadores visuais do fluxo de execução, sempre em resposta aos comandos do jogador ou relacionada à interatividade entre os objetos do cenário.
Na Unity 3D, toda a parte funcional do jogo é desenvolvida com o uso de Scripts com base na linguagem C#, enquanto na Unreal Engine podem ser utilizados Scripts em C++ ou o editor visual de fluxo denominado Blueprint. Já no Unreal Development Kit, base do na Unreal Engine versão 3, o processo é feito com outro editor visual, o Kismet.
Colisão
Neste ponto, quando falamos em interatividade, vemos a necessidade de uma estrutura que permita detectar o contato entre elementos distintos, o que nos levará ao uso de colisores2.
Uso de colisores²: A colisão é a parte da física que detecta a sobreposição de duas áreas, no modelo 2D, ou dois volumes, no modelo 3D, sendo essas áreas ou volumes definidos a partir dos colisores.
Os cálculos da física são de grande relevância para a criação de jogos. Efeitos como gravidade, vento, atrito e vários outros irão mudar o comportamento de diversos elementos presentes nos jogos, sendo aplicados, de forma geral, sobre os corpos rígidos que foram configurados no ambiente.
A colisão é um bom ponto de partida para o uso da física, pois viabiliza o controle de diversos aspectos da funcionalidade do ambiente, como a detecção do momento em que um tiro atingiu uma nave, ou o bloqueio do personagem para que ele não atravesse uma parede.
As técnicas para detecção de colisão surgiram ainda nos jogos 2D mais antigos, sendo algumas delas utilizadas até hoje, a exemplo do modelo Bounding-Box, em que o princípio utilizado é a determinação de uma área retangular invisível que envolva cada Sprite, reduzindo o problema ao simples teste da superposição de áreas.
É uma técnica que apresenta performance muito boa devido ao baixo número de contas e de verificações, mas, como ela testa colisões entre retângulos em figuras muito curvas e disformes, pode não apresentar resultados satisfatórios para os objetivos do jogo.
No modelo 3D esse cálculo torna-se mais complexo, pois a detecção de sobreposição é feita sobre os volumes dos colisores, ocorrendo ao longo de três eixos, o que levará a técnicas matemáticas bastante avançadas para trabalhar com o cálculo de envoltórias.
É claro que, quanto mais complexo o formato da envoltória, maior a necessidade de processamento para o cálculo da colisão, o que nos leva a dar preferência a colisores mais simples, como esferas e cápsulas.
Força
Além da colisão, o principal elemento representativo da física nos jogos é a força, como a gravidade, por exemplo, que funcionará aplicando uma aceleração negativa de valor constante aos objetos no eixo vertical. No entanto, as forças não atuam sobre todos os elementos da cena, sendo normalmente aplicadas apenas aos corpos rígidos relacionados a elas de acordo com os parâmetros adotados pelo jogo.
Corpos rígidos apresentam características como posição, velocidade, densidade, massa, rotação, velocidade angular, entre várias outras. Força e torque podem ser adicionados a um corpo rígido, modificando algumas de suas características originais.
Após importar os modelos e animações necessários para o cenário do jogo, determinar os colisores, configurar elementos físicos e mudanças de estado dos personagens, programar a resposta aos eventos de colisão e controlar via programação, visual ou não, a animação de personagens e objetos constituintes da cena, temos a primeira versão de um jogo 3D.
Movimentação de elementos
Em termos do controle de movimentação dos elementos da cena, ele pode ser predefinido, inclusive com certa aleatoriedade, ou baseado em elementos de inteligência artificial. Um ferramental interessante, nesse ponto, é o uso de Navigation Mesh, ou malha de navegação, quando é definida uma área sobre a superfície na qual se encontram os personagens e regras para que um persiga o outro nesta área.
Outra forma de movimentar alguns dos elementos do cenário é por meio da aplicação direta da física, como no movimento das árvores que decoram um terreno a partir do uso de um componente de força para simulação do vento.
Com todo o cenário e objetos definidos no ambiente de edição da Game Engine, temos que pensar na narrativa do jogo. Ou seja, se em primeira ou terceira pessoa, pois isso irá definir a própria utilização da câmera, podendo acompanhar o movimento e o olhar do personagem do jogador, quando em primeira pessoa, ou apenas mantendo-o dentro de um espaço de visualização, para os jogos em terceira pessoa.
Iluminação
A iluminação não pode ser esquecida, devendo ser aplicada de forma adequada para proporcionar as sensações propostas pelo enredo, como o uso de lugares mais escuros para cenas de suspense.
Efeitos sonoros
Da mesma forma, o uso de sons no jogo deve ser muito bem planejado junto ao enredo. Os sons mais diversos são de grande importância, pois, assim como no mundo real, a audição é um de nossos sentidos mais importantes.
Os dois principais tipos de som em um jogo são a trilha sonora e os efeitos pontuais. Eles devem transmitir informação e emoção na medida certa em cada situação do jogo, como nas corridas, com o som do atrito do pneu em uma curva, e o barulho dos outros carros que se aproximam, ao mesmo tempo em que uma música bastante rápida e animada traduz o clima de velocidade durante todo o tempo.
Com as tecnologias de som 3D outras possibilidades surgiram, e o som passou a ser utilizado no sentido de localização, com base no volume e direção deste, fazendo com que o jogador se afaste de perigos que ele ainda não viu na cena, ou se aproxime de recompensas e objetivos com a análise da proximidade do som em meio ao mapa.
Esse tipo de tecnologia está sendo amplamente explorada por jogos como God of War, e diversos simuladores realísticos voltados para treinamento profissional, particularmente militar.
Podemos utilizar diversos softwares para a criação de SFX, como Audacity, Sound Forge, Magix Music Maker e Ableton Live. Na maior parte dos casos, o uso de uma opção gratuita, como Audacity, será suficiente, mas para criações musicais mais complexas é interessante o uso de um software profissional como Ableton Live.
Uma das telas do Audacity pode ser observada a seguir.
1. Após importar os arquivos de áudio para a Game Engine, eles devem ser associados a fontes de emissão no ambiente 3D do cenário, as quais podem ser objetos móveis, e um elemento ouvinte, ou listener, deve ser associado à câmera do jogo, de forma que as ondas sonoras sejam combinadas neste listener e transmitidas para as caixas de som ou fones de ouvido.
2. A distância e o posicionamento das fontes no espaço, além de fatores de atenuação aplicados, irão trazer a sensação de som espacial, e os eventos que definem o momento da execução dos sons são controlados via programação.
3. Além das fontes de emissão associadas aos objetos e relacionadas aos efeitos sonoros, devemos ter uma fonte associada à própria câmera, com posicionamento e volume adequados, para a reprodução contínua da trilha sonora.
Ferramentas de Gestão
Finalmente, um jogo é um software como qualquer outro. Tanto na fase de projeto quanto na fase de desenvolvimento, é necessário acompanhar as diversas tarefas relacionadas em termos de prazo e custo, o que normalmente é feito com o uso de diagramas de Gantt e modelos PERT/CPM. Assim, a utilidade de softwares específicos para a gestão desses ferramentais se tornará evidente, pois apenas eles irão permitir atualizaçãoe acompanhamento visual do nível de completude de cada tarefa.
Entre as opções de software com a finalidade de planejar e acompanhar o andamento de projetos, podemos citar produtos como:
· Microsoft Project;
· Gantt Project;
· Open Project;
· Open Workbench;
· MindView.
Aula 2: Histórico e Ferramentais
Aula 2: Unreal Development Kit
Ambiente do UDK
O uso do UDK (Unreal Development Kit) é um ótimo ponto de partida para quem deseja criar jogos de tiro em primeira pessoa. Com base na Unreal Engine 3, é apresentado um bom editor, com diversos elementos de criação baseados em simples arraste, assemelhando-se bastante aos antigos editores de fases personalizadas, também chamados de MODs, oferecidos para jogos como Wolfenstein 3D.
O suporte ao UDK foi descontinuado a partir da versão 4 da Unreal Engine, sendo aconselhável utilizar esta última em novos projetos. Isso não impede que o produto tenha ótimos aspectos didáticos, nem que vários projetos ainda sejam criados nele.
Algo que impressiona nos jogos criados com o UDK é a qualidade gráfica, já que o ambiente é baseado na Unreal Engine 3, e a escolha da inclusão dos pacotes de componentes do jogo Unreal Tournament oferece uma ampla gama de Assets, tratando de materiais, modelos 3D,sons, veículos, árvores, entre diversos outros, os quais podem ser utilizados para efetuar testes no ambiente e servem de base para a definição de componentes autorais.
A primeira versão da Unreal Engine foi criada pela Epic Games em 1998, dando suporte ao jogo Unreal, e o motor já tinha uma detecção de colisão, inteligência artificial e renderização. O software também tinha um sistema de rede, que era considerado limitado em relação ao seu maior concorrente da época, o jogo Quake II.
Embora tenha evoluído muito com o tempo, ainda era de utilização interna da empresa, até que o kit denominado UDK teve a disponibilização liberada de forma gratuita para o público em geral no final de 2009, focado em estudantes e desenvolvedores independentes.
O ambiente do UDK Editor é dividido em quatro partes:
1. Em vez de criarmos as malhas no processo de uso de Brush e CSG, vamos utilizar os diversos componentes disponibilizados pelo UDK, extraídos do jogo Unreal Tournament, os quais permitem a composição de um ambiente de testes com grande facilidade.
2. O acesso a esses Assets será feito a partir do maior facilitador do UDK, que é a janela Content Browser, a qual traz todos os recursos disponíveis organizados em pacotes, permitindo adicioná-los à cena com simples operações de arraste.
3. A abertura do Content Browser pode ser efetuada a partir da ToolBar ou com o uso da combinação de teclas CTRL+SHIFT+F, e nele podem ser encontrados elementos como malhas, texturas, árvores e outros componentes pré-configurados, além de componentes genéricos, como luzes, neblina e veículos, na divisão Actor Classes.
Criação de Terreno
Uma pequena plataforma certamente não é o suficiente para um jogo FPS. Logo, devemos nos preocupar com a criação de um cenário amplo, com boas possibilidades de movimentação, em que os terrenos criados no UDK se tornam uma excelente opção. Vamos iniciar um novo projeto e remover a plataforma e o cubo padrão.
Com o ambiente livre, o próximo passo será a criação de um terreno a partir da opção de menu Tools..New Terrain, sendo solicitadas, na janela que se abrirá, as configurações básicas, como posicionamento do início do terreno em termos de X, Y e Z, além do número de divisões que serão utilizadas em X e Y. O terreno é sempre modelado a partir de uma malha plana que sofre elevações em seus vértices, modificando a coordenada Z de forma localizada.
Com a visualização ajustada para trabalhar o terreno e a translação deste para uma área que facilite seu manuseio, as alturas devem ser configuradas com a utilização das ferramentas disponibilizadas pela opção Terrain Edit Mode, divisão Modes da Toolbar, também ativadas por meio da combinação de teclas SHIFT+F3.
As elevações são obtidas clicando com o mouse, em conjunto com a tecla CTRL, sobre o terreno, isto depois de selecionar as opções Tool e Brush do painel de edição de terrenos.
A opção Toogle Wireframe permitirá a visualização da malha do terreno, o que é um grande facilitador na fase de edição, e o aumento ou diminuição do detalhamento é controlado pelas opções de Tessellation. Lembre-se, porém, que o maior nível de detalhe sempre aumentará o processamento exigido.
Aqui já podemos configurar o jogo para UTDeathmatch e experimentar o ambiente criado, clicando com o botão direito em qualquer local sobre o terreno e selecionando, no menu de contexto, a opção Play From Here.
Com as alturas definidas, a próxima preocupação será a utilização de um material adequado, em substituição ao material padrão do UDK, o que será feito com o Content Browser e o Terrain Editor trabalhando de forma conjunta.
A partir do pacote UDK Game, no Content Browser, filtre os objetos disponíveis, marcando a opção "Materials", e clique sobre o material desejado, o qual ficará selecionado com uma borda amarela. Em seguida, volte ao Terrain Editor, clique com o botão direito na divisão HeightMap, e escolha "New Terrain Setup Layer from material (auto-create)".
Agora vamos acrescentar elementos decorativos ao ambiente, o que é feito com a definição de uma camada de decoração, ou DecoLayer. Para criá-la você deve clicar com o botão direito em HeightMap, escolhendo a opção "New DecoLayer".
Em seguida selecionamos o objeto decorativo no Content Browser, escolhendo uma malha de árvore a partir do pacote UDKGame, com o uso do filtro Static Mesh e busca por "tree".
Estando com a DecoLayer criada e o objeto decorativo selecionado, o próximo passo é a associação entre os elementos, o que é feito por meio das propriedades do terreno, exibidas a partir da opção Properties do Terrain Editor. Entre as propriedades teremos a DecoLayer criada e devemos clicar em "Add New Item", sinal de adição verde, no atributo Decorations, e a seguir configurar a propriedade Factory como Static Mesh Component Factory.
Com a fábrica selecionada, a propriedade Static Mesh estará disponível e a associação com o objeto selecionado será efetuada com o clique em "Use Selected Object in Content Browser", seta verde para a esquerda. Também devemos configurar Min Scale e Max Scale, para a definição dos limites de variação para as escalas, e Density, que determina a quantidade de árvores que será criada em cada unidade padrão de área selecionada.
Agora é só clicar em conjunto com a tecla CTRL sobre o mapa para definir as áreas que serão decoradas, da mesma forma que foi feito para a definição das alturas. Lembre-se de deixar a DecoLayer selecionada no editor de terrenos para completar a ação.
Com o ambiente geral pronto, podemos incluir malhas pontuais, seguindo o padrão normal de arraste, para acréscimo de elementos a partir do Content Browser. Ao final do processo de criação devemos recompilar a iluminação, com o uso de Build..Build All, o que irá remover a mensagem "Lighting needs to be rebuilt".
Modelos e Materiais
Uma pequena plataforma certamente não é o suficiente para um jogo FPS. Logo, devemos nos preocupar com a criação de Para criar um jogo comercial são necessários elementos autorais. O uso de componentes do Unreal Tournament não seria permitido devido às questões relacionadas a direitos autorais. Uma forma simples de trabalhar com modelos próprios em meio ao UDK é a criação deles com o uso de ferramentas de modelagem como o 3DS Max.
Existe, porém, um detalhe com relação à exportação para o UDK no que se refere à definição de colisão. Além da malha que será utilizada para definir o objeto, deverá existir uma segunda malha que envolva a primeira, de forma a definir o espaço de colisão com esse objeto, podendo ter formato similar a ele ou apenas envolvê-lo com menor detalhamento.
Para que o UDK reconheça a segunda malha como espaço de colisão da primeira, durante o processo de importação ela deve usar o mesmo nome precedido de "UCX_", como Mesae UCX_Mesa.
Seguidas as regras para a criação do objeto e do colisor, os dois devem ser selecionados no 3DS Max e exportados a partir da opção Export Selected, do menu principal, utilizando o formato ASCII Scene Exporter (ASE).Na janela que se abrirá deverá ser escolhido o diretório para gravação do arquivo e o formato ASE em Save as Type, além do preenchimento do nome para o novo arquivo (Mesa.ase).
Será aberta uma janela com as opções a serem utilizadas no processo de exportação, quando manteremos o padrão utilizado pelo 3DS Max, mas precisando ser marcados, minimamente, com Mesh Definition, Geometric e Shapes.
Com o conjunto de operações efetuadas termina o trabalho no 3DS Max e temos um arquivo com o objeto e o colisor exportados em formato compatível com o UDK. Retornando para o ambiente da Game Engine, abrimos o Content Browser e efetuamos a importação, com o clique sobre o botão Import, onde será aberta uma janela que permite a escolha de arquivos de diversos formatos, inclusive ASE, viabilizando a inclusão do arquivo Mesa.ase.
Na janela seguinte, após a seleção do arquivo, devem ser definidos o pacote para o qual ocorrerá a importação e o nome do novo Asset. Utilizaremos o nome MeusAssets no atributo Package, gerando um novo pacote no projeto.
Ao final do processo de importação teremos um novo pacote contendo o Asset importado, o qual já traz a colisão. Assim, ele pode ser arrastado para a cena e utilizado livremente, como qualquer outro elemento do tipo Static Mesh. Porém, não se esqueça de salvar o novo pacote, clicando com o botão direito e escolhendo salvar (CTRL+B).
Embora o uso da segunda malha automatize a criação do colisor, a colisão também pode ser configurada clicando com o botão direito sobre a malha, no Content Browser, utilizando a opção Edit Using Static Mesh Editor, o que abrirá a janela de edição, por meio da qual podemos escolher a melhor opção de colisor a partir do menu Collision.
Embora os materiais também possam ser exportados pelo 3DS Max, ocorrem diferenças estruturais. Portanto, iremos criá-los diretamente no UDK, onde o processo é iniciado com a seleção de nosso pacote no Content Browser e o clique com o botão direito sobre a área de Assets, com a escolha da opção New Material no menu de contexto. O novo material será chamado de Madeira.
O clique com o botão direito sobre o material e o uso da opção EditUsing Material Editor irão abrir o editor de materiais do UDK. Nele, é possível criar elementos de grande complexidade, em forma de diagramas, sendo dividido em cinco áreas principais:
Para dar continuidade à criação de nosso material iremos precisar de uma textura e iremos adicioná-la ao nosso pacote no Content Browser, clicando com o botão direito na área de Assets, escolhendo a opção Import e selecionando um dos formatos aceitos para texturas, como PNG, PSD ou TGA.
Em seguida, devemos apenas localizar o arquivo com a textura e clicar no botão Abrir, nomeando o Asset como TexturaMadeira, já que o nome Madeira foi utilizado para o material.
Apenas texturas cujas dimensões sejam expoentes da base 2, como 16, 32, 128 ou 1024, tanto para a largura quanto para a altura, podem ser utilizadas no UDK.
Voltamos agora para o editor de materiais. Clicamos sobre o nó do tipo Texture Sample criado anteriormente e selecionamos TexturaMadeira para a propriedade Texture utilizando a utilização da seta verde presente ao lado da propriedade, acessível na divisão Properties.
Agora é só conectar o nó de textura ao nó principal por meio do atributo Diffuse e nosso material estará completo, mesmo que definindo um exemplo simples, com uso de iluminação difusa, sem mapeamento UV, transparências, ou outros elementos mais avançados.
Com o material definido podemos voltar para a cena, selecionar uma mesa que tenha sido instanciada e arrastar Madeira a partir do Content Browser até o objeto, de forma a aplicar o material automaticamente.
Adicionando inimigos
Embora já seja possível explorar nosso ambiente de jogo e atirar livremente nos obstáculos que foram adicionados à cena, ainda não podemos testar o combate. Agora, vamos definir alguns inimigos, de forma mecânica.
Você deve observar em meio à cena a presença de um componente do tipo PlayerStart, que se refere justamente ao início da execução de alguma ação no jogo, como o surgimento de um inimigo ou o posicionamento inicial do jogador. Caso não exista esse componente na cena, ele pode ser adicionado com o uso do clique com o botão direito no cenário, seguido de Add Actor e Add PlayerStart.
Os inimigos serão gerados na posição definida pelo PlayerStart. Logo, deverá ser um local que apresente alguma barreira, de forma a permitir uma criação com a possibilidade de ações furtivas, melhorando a qualidade do desafio em termos gerais.
Tendo escolhido um bom local, agora é só trabalhar com os comandos de Script, executando o jogo e pressionando a tecla T (Type) para abertura da linha de comandos. Nessa linha será escrito o comando AddBots 1, o que irá gerar os inimigos, um de cada vez, na posição do PlayerStart.
Aula 3: FPS com UDK
Aula 3: FPS com UDK
Componentes Complementares
A quantidade de jogos FPS cresceu no mercado, e diversos componentes são comuns nesses jogos, como veículos, teletransporte e suprimentos. 
Os veículos englobam elementos que podem ser utilizados pelo personagem do jogador, ou até pelos inimigos automatizados, passando a ser controlados em termos de navegação e de ataque, podendo ser, por exemplo, uma nave com mísseis, um canhão, ou até mesmo uma bicicleta ou um dragão. No jogo Final Fantasy era tão comum o uso de chocobos, uma espécie de avestruz fictícia, como veículos, que eles se transformaram em um símbolo para o jogo.
Para adicionar um veículo, assim como diversos outros tipos de componente, você deve navegar para a aba Actor Classes do Content Browser, onde estarão disponíveis, agrupados de acordo com a categoria, elementos que trazem algum tipo de ação predefinida. Alguns exemplos de veículos estão disponíveis, e aqui utilizaremos um modelo Manta, o qual será criado a partir do arraste de um elemento Vehicles..UTVehicleFactory_Manta para a cena na posição desejada.
A construção de um veículo envolve diversos elementos, como colisão, animação e interação com o personagem, além da física envolvida. Existe ainda a possibilidade de o veículo atirar ou disparar mísseis, o que aumenta bastante a complexidade de sua concepção.
Como os veículos do exemplo já trazem toda a programação necessária, a única preocupação será a de lidar com a escala, mas a ferramenta de escalonamento padrão não é aplicável aos componentes "Factory". Nós devemos clicar com o botão direito sobre o veículo e abrir a janela de propriedades (Properties), ou utilizar a tecla F4, e modificar o valor da propriedade Display..Draw Scale para um padrão adequado à cena.
Feito isto, já podemos executar o jogo e utilizar o nosso veículo, no qual iremos embarcar e desembarcar com o uso da tecla "E", o que é indicado visualmente quando o jogo está configurado para UTDeathmatch.
Outro componente que possibilita novas funcionalidades para o jogo é o UTTeleporter, responsável pelas ações de teletransporte, muito comum no acesso a salas secretas ou na movimentação rápida para áreas longínquas dentro do cenário. Como existe um deslocamento entre a origem e o destino, serão necessários dois componentes desse tipo, demarcando as duas extremidades, de forma a viabilizar o teletransporte.
Após arrastar UTTeleporter para a cena, a propriedade Tag define o nome do local, enquanto URL define para qual Tag será efetuado o salto. Para testar a funcionalidade vamos colocar dois componentes desse tipo em pontos distantes do mapa, preferencialmente com algum obstáculo que impeça o acesso sem o uso de teletransporte, como a movimentação para um platô muito alto.
Para configurar a ida e a volta de forma simétrica, devemos definir as Tags, como LadoA e LadoB, e apontar as URLs para os elementos recíprocos. Essa simetria não é obrigatória, sendo possível queele se movimente de um ponto A para um ponto B, e entrando novamente em B saia em um ponto C, além de ser permitido que a URL não seja configurada, definindo um caminho sem possibilidade de retorno.
Muitas vezes as ações de teletransporte levam para locais em que podem ser encontradas novas armas ou outros elementos que sejam necessários para completar os objetivos do jogo, algo que podemos simular facilmente com a adição de um componente do tipo Pickup, que trata de uma fábrica de suprimentos.
Fica clara a necessidade de definir um objetivo. Nesse caso, ofereceremos uma arma mais poderosa para o jogador, que só poderá ser obtida passando pelo teletransporte. Isso será feito com a colocação de um componente do tipo Weapon..UTWeaponPickupFactory na área de difícil acesso, seguido da escolha do modelo como UTWeap_LinkGun.
Com a definição de um espaço fechado, onde ficaria o elemento Pickup, e os componentes para teletransporte que viabilizem a entrada e saída desse espaço, estamos definindo os passos mais básicos para a criação de FPS com Puzzle, estilo de jogo que tem sido muito apreciado no mercado.
Kismet e Triggers
Embora seja possível gerar inimigos via comandos, devemos automatizar o processo para a construção de um jogo real, o que será feito com o uso do Kismet e de Triggers.
Kismet é um editor visual para o fluxo de execução do jogo, sendo utilizado na geração de inimigos, controle de luzes e portas, definição de colecionáveis e todas as demais ações que podem ocorrer no jogo. As ações, no entanto, devem acontecer em instantes específicos, como no início do jogo, ou quando uma área é acessada, o que nos levará ao conceito de evento.
Em nosso exemplo iremos utilizar o Kismet para a geração dos inimigos, mas, como e quando o processo será iniciado? Nesse ponto entram em ação as Triggers, ou gatilhos, que tratam de volumes para detecção de colisão, gerando eventos na passagem por eles (Touch) ou quando um tiro os atinge (Take Damage), entre outros.
Esses eventos são utilizados no Kismet para sinalizar o início de alguma ação, como a animação de uma porta, a adição de um objeto colecionável, ou a geração de inimigos (Spawn), por exemplo.
Para testar a definição de rotas, vamos adicionar uma casa em meio ao nosso cenário. No caso SM_House_01, presente no pacote UDK Game, e fazer com que os robôs inimigos efetuem a ronda ao redor dessa casa.O componente PlayerStart será posicionado ao lado da casa para que os inimigos sejam gerados naquele ponto, e a definição da rota de navegação será feita com o uso de PathNodes, representados graficamente como uma maçã e uma seta no sentido preferencial do movimento.
A forma mais simples para criar um PathNode é clicar com o botão direito no local desejado e selecionar Add Actor..Add PathNode. Deverão ser criados quatro componentes desse tipo ao redor da casa, segundo a ordem de navegação a partir do PlayerStart, rotacionados de forma que as setas direcionais apontem para o elemento subsequente.
Um grande problema a enfrentar é que veículos e demais elementos com a propriedade Navigation Point entram no cálculo do caminho para navegação e devem ser bloqueados para evitar movimentos aleatórios. O bloqueio é feito por meio da aba Scene, do Content Browser, onde devemos selecionar os elementos com Navigation Point, marcando em seguida o atributo Blocked.
Com o ambiente preparado, basta escolher a opção de menu Build..AI Paths para o cálculo das rotas de navegação, que serão exibidas na ViewPort corrente a partir da opção Show..Paths, ativada no ícone de configuração do canto superior esquerdo, representado graficamente como um triângulo apontando para baixo, ou apertando-se a tecla P.
Em nosso exemplo acrescentaremos um elemento decorativo, que servirá de marcador do local do evento, devendo ficar em uma posição em que o jogador não seja atingido de imediato pelos tiros inimigos. Sobre esse objeto de referência iremos adicionar uma Trigger, alterando sua escala para que envolva um volume pouco maior do que o do objeto, de forma a gerar o evento necessário assim que o jogador se aproximar.
Para adicionar a Trigger, que é representada por um interruptor, com a área de influência exibida como uma malha verde, você deverá clicar com o botão direito na posição selecionada e escolher Add Actor..Add Trigger.
1. Mantendo a Trigger selecionada, o Kismet deve ser acionado a partir da Toolbar, no ícone com uma letra K estilizada, ao lado do ícone do Content Browser. Na janela que se abrirá você deverá clicar com o botão direito e escolher New Event Using Trigger_0..Touch.
2. Estando o evento criado, o próximo passo é a definição da ação iniciada por ele. No caso, a geração do inimigo, o que será feito com o acréscimo da fábrica correta, clicando novamente com o botão direito na área do Kismet e selecionando New Action..Actor..Actor Factory.
3. Para efetuar a ligação entre o evento e a ação de geração de inimigos, vamos arrastar o mouse a partir do conector Touched, no evento, até Spawn Actor, na fábrica. Ainda precisamos definir o local onde ocorrerá a geração e para isso devemos selecionar o PlayerStart, no editor, voltar ao Kismet, e utilizar a opção New Object Var Using PlayerStart_0, conectando, em seguida, com Spawn Location, na fábrica.
Pode ser interessante reposicionar os objetos nos diagramas do Kismet, mas você observará que clicar e arrastar irá transladar todo o conjunto, sendo necessário utilizar a tecla CTRL junto ao clique para mover um objeto específico.
Agora é necessário configurar a fábrica para o tipo de objeto correto, ou seja, o inimigo, o que será feito com a configuração da propriedade Factory como UTActorFactoryAI, escolhida com o clique no ícone com um triângulo azul apontando para baixo. Em seguida serão abertas as opções específicas da fábrica, onde deverão ser marcadas as opções Give Default Inventory e Force Deathmatch AI, além da escolha do tipo UTPawn para Pawn Class.
Puzzle com FPS
Os jogos de FPS ganham maior complexidade e permitem um roteiro mais desafiador quando passam a incorporar elementos de Puzzle. Um exemplo muito bom dessa abordagem é a série de jogos God of War, em que Kratos precisa acionar diversos mecanismos da forma correta para que sejam abertos portões ao longo do cenário.
Com o uso do UDK não é difícil implementar esse tipo de funcionalidade, bastando utilizar o Kismet, alguns colecionáveis e o Unreal Matinee. Vamos iniciar a criação com a definição de um espaço fechado e uma porta dupla, que possa ser aberta a partir do centro. Para tal, os eixos de rotação das portas devem ser definidos nas extremidades de sustentação.
Para indicar o local onde ocorrerá a abertura da porta podemos acrescentar uma iluminação do tipo PointLight com tonalidade verde, além de raio pequeno e alto brilho, de forma a funcionar como um spot indicativo do local correto.
Com o ambiente preparado, podemos nos preocupar com a abertura da porta, o que exigirá a colocação de uma Trigger, no mesmo local onde está o ponto de luz verde, servindo como elemento de inicialização do processo. Em seguida, vamos abrir o Kismet, configurar um novo evento do tipo Touch para a Trigger, e adicionar um elemento do tipo Matnee, responsável pelo controle da animação, com o uso do botão direito e escolha de New Matinee.
Antes de implementar a animação devemos alterar o eixo de rotação da porta direita para a extremidade direita do objeto, o que é feito com a modificação de Display..Pre Pivot..X na janela de propriedades. A configuração será necessária para a inversão na rotação da porta, viabilizando a abertura ao centro.
Configurados os eixos e convertidos os objetos, o Kismet deve ser aberto. Com o clique do botão direito sobre o elemento Matinee, devemos escolher a opção Open Unreal Matinee, onde criaremos as trilhas de animação para cada uma das portas.
Inicialmente devemos selecionar a porta da esquerda e no Unreal Matinee criar um grupo, com o uso de Add New Empty Group, a partir do clique do botão direito, adotando o nome PortaE. Adicionaremosuma trilha de movimento ao grupo criado, com o clique do botão direito sobre ele e escolha de Add New Movement Track. O processo será repetido para a porta da direita, mas agora adotando o nome PortaD para o segundo grupo.
Começando pela porta da esquerda, devemos adicionar as chaves na Movement Track no instante de 0 segundos e no instante de 1 segundo. A opção Add Key é representada pelo ícone no canto superior esquerdo do editor, logo abaixo do menu File. Chaves colocadas erroneamente podem ser removidas com o menu Edit..Delete Selected Keys, após clicar sobre elas na linha de tempo.
Agora precisamos mover a linha do tempo para o instante de um (1) segundo, clicando sobre a chave criada, e rotacionar a porta para a posição aberta. Com a modificação podemos verificar o movimento a partir do clique sobre o botão de execução do Unreal Matinee, ou movendo o indicador da linha de tempo.
O mesmo processo deve ser repetido para a porta da direita, lembrando que a rotação ocorrerá no sentido contrário, mas com a mesma amplitude, para que o movimento de abertura tenha maior realismo.
Finalmente, voltamos ao Kismet e efetuamos a ligação entre o conector Touched do evento e o Play de Matinee, sendo possível observar que as portas se abrem quando o jogador passa pelo local com iluminação verde, mas a ideia não é apenas criar uma porta e sim um puzzle.
Vamos acrescentar quatro elementos, que funcionarão como chaves no ambiente, sendo possível carregar apenas uma de cada vez, o que obriga o jogador a selecionar uma e tentar abrir a porta. Uma boa sugestão é colocar nos quatro pontos extremos da área fechada, pois a troca de chave exigirá maior quantidade de movimento. Nesse ponto estamos iniciando a criação de um elemento colecionável.
O próximo passo é a adição de Triggers para englobar cada uma das chaves criadas, de forma a permitir interatividade com o jogador. Os elementos visuais definidos para as chaves deverão ser convertidos em Mover e as Triggers deverão ser posicionadas nas mesmas coordenadas X e Y de cada chave, o que pode ser feito a partir da modificação do valor na propriedade Movement..Location.
Voltando ao Kismet, inicialmente devem ser criadas cinco variáveis booleanas, sempre por meio da opção New Variable..Bool. As variáveis terão valor inicial false, ou b Value igual a zero, e os nomes, definidos por intermédio da propriedade Var Name, serão: JogadorTemChave, Chave1, Chave2, Chave3 e Chave4.
 
Pela regra que será utilizada, o jogador poderá pegar apenas uma das quatro chaves, o que definirá o valor da booleana equivalente como true, assim como JogadorTemChave assumirá o valor true, e para pegar uma segunda chave, a chave anterior deverá ser descartada.
No próximo passo devemos selecionar a Trigger relacionada à primeira chave, voltar ao Kismet e adicionar um evento do tipo Used relacionado a esta Trigger. Nas propriedades deve ser mantido Aim to Interact e, apenas se necessário, modificar Interact Distance, além de modificar o valor de Max Trigger Count para zero, de forma a viabilizar a repetição do evento de forma indeterminada.
Em seguida deve ser acrescentado um nó de comparação para valores booleanos, escolhendo-se a opção New Condition..Comparison..Compare Bool. Com o nó criado, devemos clicar com o botão direito em seu conector Result e escolher a opção Create New Bool Variable, definindo o valor de b Value como 1, de forma a assumir True.
Também devemos adicionar uma referência de variável a partir da opção New Variable..Named Variable, configurando Expected Type como SeqVar_Bool e Find Var Name como JogadorTemChave, devendo ser efetuada a ligação desse novo nó com o conector Bool do nó de comparação.
A configuração anterior é um teste para saber se o jogador já pegou alguma chave, o que o impossibilitaria de pegar a segunda. Na condição verdadeira (True), o jogador poderá estar devolvendo a chave ou tentando pegar outra, quando, se a chave associada for diferente da que ele detém, deverá ser emitido um aviso, enquanto para a mesma chave ocorrerá a devolução, fazendo com que a variável Chave1 receba False.
Vamos adicionar outro nó do tipo Compare Bool associado ao conector True do primeiro, agora testando o valor de Chave1. Se ele for True permitiremos a devolução da chave com a atribuição do valor false para Chave1, enquanto para o fluxo do conector False será apresentada uma mensagem de aviso.
Caso o valor de Chave1 seja modificado para true, o jogador obteve a chave no processo, enquanto na devolução Chave1 retorna para false e o jogador não tem mais a chave, o que significa dizer que que JogadorTemChave receberá o valor de Chave1 nos fluxos onde não ocorre falha.
 
A atribuição do valor é definida com a adição de um nó do tipo Bool, tendo o conector Value associado uma referência para Chave1 e Target conectado a uma referência para JogadorTemChave. O novo nó de fluxo do tipo Bool estará associado às saídas dos dois componentes Bool criados anteriormente.
Finalmente, o retorno visual é imprescindível e devemos retirar a chave da cena com o uso de New Action..Toggle..Toggle Hidden. No ambiente do editor deverá ser selecionada a chave e, de volta ao Kismet, adicionado New Object Var Using InterpActor_2, associando o novo nó ao conector Target de Toggle Hidden, enquanto a saída do Bool que seta True para Chave1 deverá ser associada ao conetor Hide, e o Bool que define False para Chave1 será ligado ao conector Unhide.
Já se torna possível testar a funcionalidade de coleta sobre a primeira chave com a execução do jogo e uso da tecla "E" na proximidade do objeto, sendo a configuração global apresentada a seguir, de forma a facilitar a localização dos passos anteriores. O mesmo processo deverá ser repetido para as outras três chaves do jogo, associando-as sempre às variáveis, Triggers e elementos visuais corretos, de forma a permitir a funcionalidade desejada.
Também devemos informar ao jogador quando ele está na área que possibilita pegar ou devolver a chave, o que será feito com o uso de Announcements. Nesse caso, o processo é bem mais simples, envolvendo a criação de dois nós do tipo Play Announcement, em que o primeiro terá a frase "Pressione E para devolver a chave", enquanto a frase do segundo será "Pressione E para pegar a chave".
 
Com os nós criados selecionamos a Trigger da primeira chave e acrescentamos um evento do tipo Touch no Kismet, lembrando de modificar Max Trigger Count para zero. O conector Touched será associado a um novo Compare Bool, tendo uma referência para Chave 1 no conector Bool e um booleano True associado a Result. A comparação terá a saída True associada à mensagem de que o usuário contém a primeira chave, enquanto para False temos a conexão com a mensagem de descarte.
O mesmo processo deverá ser repetido para as outras três chaves do cenário e o mecanismo de coleta e descarte de nosso jogo estará completo, incluindo a configuração de todas as mensagens de feedback para o jogador.
Agora falta apenas condicionar a abertura da porta ao uso da chave correta, o que será feito com a modificação do fluxo associado à animação, incluindo um nó do tipo Compare Bool, que deverá testar se a chave escolhida, aqui a de número 4, foi coletada. Com a chave em mãos será efetuada a abertura da porta e, caso contrário, será exibida a mensagem indicativa por meio de um Announcement.
 
O nó do tipo Play Announcement terá a frase "Sem a chave correta", e estará associada à saída False da comparação, o que ocorre quando o jogador não tem a chave de número 4, enquanto a saída True iniciará a execução da animação de abertura das portas.
Por fim, completamos o Puzzle de nosso jogo. Uma observação final é a de que, em algumas situações, as portas podem perder a colisão, o que é resolvido facilmente com o clique do botão direito sobre cada uma delas e escolha de Set Collision Type..Block All.
Aula 4: Unreal Engine
Aula 4: Unreal Engine
Características da Unreal Engine
Ao trabalharmos com UDK, estávamos utilizando a versão 3 da Unreal Engine,mas, a partir da versão 4, passamos a trabalhar com um ambiente bem mais profissional, em que o sistema de Blueprints conseguiu trazer ainda mais praticidade do que o Kismet, além de oferecer muito mais liberdade para as atividades que envolvem programação.
Os Blueprints são editores visuais de fluxo, mas, diferentemente do Kismet, trazem um sistema expansível, no qual as ferramentas apropriadas são disponibilizadas de acordo com o perfil da tarefa executada, como telas voltadas para controle de animação e física, entre outros, além de interagir com componentes programados em linguagem C++. Eles são o coração da Unreal Engine, e saber lidar com Blueprints trará grande produtividade na concepção de jogos.
Na utilização mais comum, o Blueprint trabalha com um grafo de Workflow, com diferentes tipos de nós, os quais são identificados por cores. As funcionalidades do jogo serão definidas pela sequência de execução dos nós.
Não podemos deixar de lado as possibilidades para a criação de diversos efeitos interessantes, com o uso dos sistemas de partículas oferecidos pela Unreal Engine, em que o plugin Niagara apresenta-se como um grande facilitador ao oferecer templates personalizáveis.
Um ponto muito forte da Unreal Engine é a grande qualidade gráfica oferecida, trabalhando com sombreamento de nível fotográfico em tempo real, sempre aproveitando as GPUs das placas de vídeo.
Ferramentas de criação de terrenos
Na criação de cenários, além de permitir a importação de malhas e materiais das mais diversas ferramentas, como 3DS Max, Blender e Maya, a Game Engine oferece um excelente ambiente para a criação de terrenos realísticos e a possibilidade de simulação de água e vento, entre outros.
Observando o fluxo de execução do exemplo inicial e as cores da tabela, podemos concluir que, ocorrendo o início do jogo, reconhecido no evento Construct, o personagem do jogador é obtido por meio de Get Player Character, sendo feita a conversão para o tipo desejado, e associado à variável My Character, a partir de uma função Set.
PhysX
A física da Unreal Engine é apoiada no PhysX, trazendo um excelente controle de colisão e transmitindo intenso realismo na utilização de forças. O motor de física garante interações próximas do mundo real entre os atores utilizados na cena, o que aumenta a imersividade do jogo, principalmente com o suporte a realidade virtual fornecido pela plataforma.
Bhavior Trees, Navigation Mesh e elementos de AI
Em termos de inteligência artificial, a Unreal Engine traz diversos recursos poderosos, os quais incluem, além do Navigation Mesh, também oferecido pela Unity 3D, o uso de Behavior Trees — ou árvores de decisão —, e os elementos de AI programados em C++ são facilmente associados aos personagens a partir de Blueprints do tipo AI Controller.
Além disso, ocorre a constante coleta dados no ambiente para que o EQS ( Environment Query System) retorne um item que melhor se adapte às condições definidas.
Sistema de Blueprints
Para controle de animação é utilizado um sistema de Blueprints mais completo e produtivo do que a metodologia do Matinee, presente no UDK. O sistema permite até mesmo a animação de Skeletal Meshes com a utilização de bones e a coordenação de transições via máquinas de estado, ou State Machines, além de oferecer um novo modelo, denominado Sequencer, considerado o estado da arte para configuração de cinemática.
Sound Wave e Sound cue
O sistema de som trabalha com Assets específicos, como Sound Wave e Sound Cue, que podem estar relacionados apenas a um arquivo de som, sendo aceitos diversos formatos, ou tratar de sons combinados por meio do sistema de mixagem. Os sons são executados a partir de um componente do tipo Ambient Sound, posicionado em algum local da cena, ficando integrado ao cenário em termos espaciais.
Unreal Motion Graphics UI (UMGI)
Também é fornecido um bom suporte para a construção de HUD e interfaces de usuário, com a utilização de UMGUI (Unreal Motion Graphics UI), na verdade um conjunto de componentes muito similar à biblioteca UI, da Unity 3D, porém com funcionalidades direcionadas a partir de elementos do tipo Blueprint.
Actor
Ainda comparando alguns dos elementos básicos presentes na Unity 3D e na Unreal Engine, enquanto na Unity 3D temos o Game Object como elemento primário para utilização na cena, na Unreal Engine o elemento seria Actor, que serve de base para Pawn, objeto genérico que utiliza inteligência artificial, ou seu derivado Character, para personagens humanoides animados.
Gameplay Framework
Assim como ocorria no UDK, a Unreal Engine oferece modelos comportamentais completos para diferentes tipos de jogos em ambiente 3D, inclusive de forma bem mais abrangente, o que é feito pela escolha de Game Mode em seu Gameplay Framework. Junto com Game Mode, Player State e Game State definem o conjunto de regras do jogo e acompanham o progresso do personagem durante a execução como um todo.
Algo interessante no uso do Gameplay Framework é que qualquer objeto Pawn poderá ter suas ações definidas por controladores como AIController, para a utilização de inteligência artificial, ou PlayerController, para responder aos comandos do jogador.
Após instalar a Game Engine, precisamos executá-la e criar um projeto utilizando um dos templates oferecidos, em que o exemplo mais simples seria Blank, com uma plataforma, domo representando o céu e iluminação básica. Com o projeto criado, será aberto o ambiente de criação visual, denominado Unreal Editor, que é dividido em seis áreas:
1. Editor modes
2. Toolbar
3. Viewports
4. Content Browser
5. World Outliner
6. Details
As Viewports permitem a manipulação visual dos objetos da cena, podendo ser maximizadas ou restauradas, e sempre apresentam uma barra de ferramentas, na parte superior, para as ações mais comuns, como escolha do tipo de visualização e do detalhamento, seleção dos elementos que serão apresentados, transformações lineares (translação, rotação e escala) e configuração dos Snaps de precisão.
Diversas teclas de atalho são disponibilizadas para lidar com as Viewports, como Setas, PgUp e PgDn, para navegação da câmera, W, E e R, respectivamente, para translação, rotação e escala, Scrool do mouse, para controle de zoom, além de um grande conjunto de teclas para modificar a visão e detalhamento, todas informadas ao lado dos ícones representativos.
Quando a Viewport está configurada para a visão de perspectiva, é possível utilizar clique e arraste no fundo para a movimentação da câmera, onde o botão esquerdo modifica o ângulo no plano horizontal e o botão direito modifica a elevação.
Por meio dos ícones da área Editor Modes controlamos a forma de utilização do editor, e cada modo de trabalho tem um ícone representativo, bem como uma tecla de atalho.
Na Unreal Engine o Content Browser está integrado ao ambiente como um painel no lugar de uma janela, assemelhando-se bastante ao modelo utilizado pela Unity 3D. Agora os Assets ficam organizados nesta área, resolvendo uma fragilidade do UDK em termos de agrupamento de conteúdo para geração do executável, processo conhecido como Cooking.
O uso do Content Browser será fundamental para a organização e importação de Assets. Para ter acesso aos Assets já existentes na Game Engine, você deve clicar em View Options, na parte inferior direita, selecionando a opção Show Engine Content. Para que possa acessar seu próprio conteúdo, não se esqueça de manter a opção Show Developers Content marcada.
Embora o Content Browser permita uma organização lógica dos Assets, todo projeto criado na Unreal Engine é fisicamente organizado em termos de um diretório de base, em que pode ser encontrado o arquivo principal, com a extensão uproject, e todos os demais componentes agrupados em subdiretórios específicos, destacando-se Source, onde temos os códigos-fonte em linguagem C++, e Content, com os diversos outros Assets do projeto.
Enquanto World Outliner apresenta uma visão hierárquica dos atores utilizados, permitindo rápida navegação e seleção, o painel Details exibe aspropriedades do elemento selecionado, viabilizando a manipulação de seus atributos, além do acréscimo de funcionalidades, o que é realizado a partir da opção Add Component.
Da mesma forma que um ator pode ter seu posicionamento, rotação e escala modificados visualmente por meio das transformações lineares oferecidas no ambiente, os valores podem ser modificados diretamente em Details, segundo os eixos X (vermelho), Y (verde) e Z (azul), padrão de cores adotado em todo o ambiente da Unreal Engine.
Por fim, a Toolbar contém as opções mais utilizadas no editor, referentes ao projeto como um todo, incluindo salvamento rápido, controle de versões, acesso ao Marketplace, configurações gerais, compilação do projeto e execução do jogo (Play).
Criação do Ambiente de Jogo
Criação de projeto
Os terrenos são uma ótima ferramenta para a criação de cenários complexos e realistas, e o ferramental da Unreal Engine traz diversas funcionalidades que facilitam muito a criação de Assets desse tipo. Inicialmente vamos criar um projeto vazio, escolhendo o template Blank, e daremos a ele o nome Teste001, sendo acrescentadas, por padrão, a plataforma e o domo na geração do projeto.
Com o projeto criado, manteremos o domo representativo do céu, mas eliminaremos a plataforma, clicando no elemento Floor, em World Outliner, e pressionando a tecla Delete.
Após remover a plataforma, nosso próximo passo é a construção do terreno, que pode ser definido com o uso da ferramenta Landscape a partir de três caminhos distintos:
1. Create, definindo o terreno a partir das dimensões configuradas.
2. Fill World, tornando o terreno tão grande quanto possível.
3. Import from File, com a utilização de um mapa de alturas externo.
Em nosso exemplo utilizaremos a opção Create, pois ela trará um custo computacional menor, viabilizando a edição em máquinas menos poderosas ao assumir a configuração padrão, com 64 setores (8x8), o que já define uma área ampla e confortável para a modelagem. Após criar o terreno, salve a cena como Cena01, utilizando a opção de menu File..Save Current.
A ferramenta de criação de terrenos da Unreal Engine é bem mais completa do que a utilizada no UDK, permitindo a definição de montanhas e vales com grande facilidade, por meio de processos muito mais imersivos.
Modelagem
O passo seguinte, após a definição do terreno, é a modelagem a partir das ferramentas de escultura, presentes no painel Sculpt, em que a principal configuração se refere à área de influência e dispersão no controle de alturas, no caso Brush Size e Brush Falloff.
ads Configurado o Brush, voltamos para a Viewport. As alturas serão elevadas, segurando-se o botão esquerdo do mouse e movendo-o sobre a superfície do terreno, enquanto a utilização do mesmo botão, em conjunto com a tecla SHIFT, diminuirá as alturas. O uso de CTRL+Z permite desfazer a ação de modelagem, enquanto CTRL+Y reaplica uma ação desfeita.
1. Com o pequeno conjunto de controles apresentado é possível modelar montanhas e vales com grande facilidade. Os auxílios visuais, como a iluminação da área que será afetada, de acordo com as configurações adotadas para o Brush, trazem uma boa noção de intensidade para a modificação que será efetuada naquela região.
2. Da mesma forma que ocorria no UDK, a Unreal Engine permite a visualização de topo, lateral, frontal e perspectiva, normalmente organizadas em quatro Viewports, com a possibilidade de alterar o nível de detalhamento e outras características na barra de ferramentas interna de cada Viewport. Este é o local onde também pode ser encontrado o controle de Snap, muito útil no refino da precisão, ao configurar passos bem definidos para as transformações lineares.
3. Para aumentar o realismo na definição das áreas montanhosas de nosso terreno, podemos utilizar o Snap de translação, reduzindo as possibilidades de posicionamento do Brush a uma grade com passos discretos..
Além do processo padrão utilizado para esculpir, a Unreal Engine oferece opções como suavização (Smooth), erosão (Erosion e Hydro-Erosion) e planificação (Flatten), entre outras, que permitem simular a ação do tempo e definir terrenos extremamente realistas — marca característica da plataforma.
Material
Nosso próximo passo será a definição de um material para que seja aplicado ao terreno. Para executar a tarefa será necessário escolher uma textura apropriada, além de trabalhar com o editor de materiais (Material Editor) da Unreal Engine.
O acréscimo da textura é o passo mais simples, envolvendo apenas a busca de uma figura com extensão reconhecida, como PNG ou JPG, e o arraste do arquivo, a partir do explorador, para a área do Content Browser. Estando a textura disponível, é iniciada a criação do material, clicando-se com o botão direito no Content Browser, ou utilizando-se Add New, e escolhendo a opção Material, sendo adotado o nome Rocha para o novo Asset.
O material criado ficará disponível na divisão do Content Browse. Com o uso de duplo-clique sobre ele será aberto o Material Editor, onde é possível criar elementos foscos, reflexivos, translúcidos, combinar texturas, além de diversas outras opções úteis para a definição de materiais extremamente realísticos.
Editor de materiais
A janela do Material Editor é dividida em seis áreas, totalmente integradas entre si:
1. Viewport
2. Details
3. Toolbar
4. Graph
5. Stats
6. Palette
Como ocorre em todo ambiente da Unreal Engine, a Toolbar do Material Editor comporta as operações utilizadas de forma global para o material, inclusive opções de salvamento, atualização de preview em tempo real, ou ativação e desativação de Stats.
O painel Viewport oferece o preview do material com diferentes formas de visualização quando aplicado a primitivas específicas ou na malha estática corrente do Content Browser, o que é especificado a partir dos ícones da parte inferior. Já na parte superior estão presentes opções para escolha da visão utilizada no preview, bem como nível de detalhamento e opções de exibição, como mostrar ou esconder o fundo.
O funcionamento do painel Graph é baseado na ligação das propriedades do material a diferentes tipos de nós, os quais podem ser conectados também a outros nós a partir de suas propriedades. Vale ressaltar que a Unreal Engine trabalha com os canais RGB em intervalos de 0.0 a 1.0, o que pode ser um pouco diferente da notação padrão, que vai de 0x00 a 0xFF, mas permite uma gama muito maior de cores.
Como os diagramas podem tornar-se muito grandes, é necessário um sistema de navegação eficiente, em que o controle de zoom é feito com o uso do scroll do mouse, enquanto o clique e arraste com o botão direito no fundo causa a movimentação da área de visualização corrente.
Podemos observar o estado atual do material na divisão Viewport e criar nós em Graph por meio do arraste a partir de Palette, ou paleta de componentes, em que é possível, inclusive, pesquisar os tipos de nós disponíveis para a criação de materiais. Pela grande quantidade de opções disponibilizadas, é bastante simples entender como a Unreal Engine consegue criar materiais de altíssimo realismo, viabilizando cenas que se confundem com o mundo real.
Também é possível criar os nós diretamente na divisão Graph. Para adicionar uma textura simples ao material basta clicar no círculo ao lado de Base Color, arrastar e soltar na posição desejada, escolhendo em seguida o tipo de nó como Texture..Texture Sample. Poderá ser observada uma mensagem de erro, referente à ausência da textura, logo após a criação.
Com o novo nó de textura criado, agora é necessário selecionar a figura que foi adicionada no passo inicial. Por meio do simples clique sobre ela no Content Browser, retornar ao Material Editor e relacionar a figura com o nó de textura a partir da seta existente para o atributo Texture, no painel Details, divisão Material Expression Texture Base.
A seta é parte do padrão da Unreal Engine, e apresenta a mensagem "Use Selected Asset from Content Browser" quando repousamos o mouse sobre ela, sendo adotada sempre que for necessárioobter o elemento selecionado a partir do Content Browser.
Podemos observar que, a cada passo executado, temos um retorno acerca do processamento interno dos Shaders, apresentado no painel Stats. Embora seja o funcionamento padrão, podemos escolher outras opções de informações, como Platform Stats, que permite avaliar o impacto do material sobre a performance de todo o jogo.
Finalizada a criação do material, agora é só aplicar ao terreno, o que é feito no ambiente de edição da cena por meio do painel Details. Com o terreno selecionado em World Outliner, a propriedade Landscape Material ficará disponível em Details, e o nosso material pode ser selecionado no Content Browser, sendo associado à propriedade com o uso da seta, ou simplesmente arrastado até a propriedade.
O material será compilado, normalmente aparecendo um contador com os Shaders que foram afetados, com a atualização da cena em seguida, ainda no modo de edição. Lembre-se de que o material precisa ser salvo no Material Editor para que as alterações sejam refletidas na cena.
Após adicionar o material do terreno, é possível acrescentar vegetações e outros detalhes de forma bastante simples. Para tal, é muito interessante utilizar alguns Assets obtidos no site do fornecedor, a partir da opção Marketplace, em que os elementos gratuitos são encontrados rapidamente com o filtro Free, ou pelo Epic Games Launcher, divisão Loja.
Além de elementos decorativos, podemos encontrar no Marketplace personagens completos, bibliotecas de inteligência artificial, efeitos baseados em partículas, materiais e diversos outros Assets, permitindo que um programador comum crie jogos complexos, mesmo sem o apoio de profissionais de mídia, de forma semelhante à montagem de um quebra-cabeça.
Adição ao projeto e configuração
Tendo efetuado o download do pacote, precisamos associá-lo ao nosso projeto com o uso do Epic Games Launcher. O pacote estará disponível na biblioteca, classificado como Owned, e deverá ser adicionado ao projeto a partir da seleção deste e de um clique sobre o botão com o texto Adicionar ao Projeto.
O pacote ficará disponível como uma nova pasta do Content Browser. O processo de aplicação das folhagens será iniciado com o acréscimo dos modelos desejados no modo Foliage a partir da opção Add Foliage Type. Neste exemplo foram utilizados grass_a_small, leaves_banana_a e leaves_fern_a_large.
Adicionados os modelos de folhagem, qualquer um deles pode ser ativado e aplicado ao terreno com o simples clique e arraste sobre a área desejada para a criação da vegetação, ou o uso da tecla Shift em conjunto com o clique para apagar determinada área. As propriedades Brush Size, Paint Density e Erase Density controlarão a quantidade de elementos que será adicionada ou removida a cada ação.
dsa Um problema no uso de folhagens é o controle dos objetos que estarão aptos a utilizá-la, mas com a opção Filters temos um controle simples, baseado em caixas de marcação, do local de aplicação, como terrenos (Landscape) e malhas comuns (Static Meshes).
A possibilidade de marcar o tipo de destino é um elemento facilitador, principalmente nas situações em que um terreno deve receber as folhagens, mas sem que elas sejam adicionadas às malhas que foram dispostas anteriormente, como uma casa ou uma cerca.
Com todas as opções configuradas, basta espalhar a folhagem sobre o terreno, processo que é indicado visualmente a partir de um gizmo esférico, apresentando a área de influência da ferramenta como um domo transparente.
Um problema no uso de folhagens é o controle dos objetos que estarão aptos a utilizá-la, mas com a opção Filters temos um controle simples, baseado em caixas de marcação, do local de aplicação, como terrenos (Landscape) e malhas comuns (Static Meshes).
A possibilidade de marcar o tipo de destino é um elemento facilitador, principalmente nas situações em que um terreno deve receber as folhagens, mas sem que elas sejam adicionadas às malhas que foram dispostas anteriormente, como uma casa ou uma cerca.
O controle de movimentação durante a execução será o mesmo utilizado na Viewport do editor de cenários. Se quiser deixar o ambiente de jogo mais interessante, você poderá importar algumas bibliotecas no Marketplace e arrastar alguns Assets do tipo Static Mesh para a cena, apenas lembrando-se de que será necessário recompilar o projeto, ou pelo menos a iluminação, na maior parte dos casos.
Aula 5: Programação e Interatividade
Programação e Interatividade
Sintaxe C++
Um elemento essencial em qualquer Game Engine é a possibilidade de expandir e adaptar funcionalidades com base em alguma linguagem de programação. Considerando-se os dois exemplos mais populares do mercado de jogos, enquanto a Unity 3D utiliza C#, na Unreal Engine adotamos o C++ como padrão para desenvolvimento.
A linguagem C++ é predecessora do C#, tendo servido como base de sua sintaxe. O uso de uma linguagem clássica e de grande abrangência na área científica, como o C++, permite acesso a uma grande base de algoritmos já implementados para áreas críticas nos jogos, como otimizações gráficas e sistemas de inteligência artificial.
De forma simplista, podemos interpretar o C++ como a linguagem C orientada a objetos, mas existem diversas outras melhorias, como a sintaxe de ponteiros com o uso de new e delete, no lugar das diversas funções de alocação de memória do C.
#include <iostream>
using namespace std;
main() {
cout << "Exemplo Simples" << endl;
return 0;
}
Nosso primeiro exemplo demonstra algumas características do C++, como o uso de include para a importação de bibliotecas, o início da execução na função main e a saída texto no vídeo por meio de cout.
A linguagem é fortemente tipada, exigindo que a variável seja associada a um tipo específico, e temos apenas um pequeno conjunto de tipos nativos. Também é necessário prestar atenção ao uso de letras maiúsculas e minúsculas, já que a linguagem é case sensitive.
Vários desses tipos podem ser modificados utilizando-se as palavras-chave signed, unsigned, short e long. Quando um desses modificadores é usado sem a definição do tipo de dado, o compilador assume o tipo int.
A sintaxe do C++ lembra muito a utilizada no C#, até mesmo pela origem comum, mas algumas diferenças podem ser observadas com relação ao uso de memória, principalmente no que se refere à utilização de ponteiros em C++.
 
#include <iostream>
using namespace std;
main()
{
int a = 5;
int* b = &a;     // b aponta para o endereço de a
*b = 10;     // posição apontada por b recebe 10
cout << a << endl; // imprime o valor 10
return 0;
}
Além dos tipos básicos, é possível criar tipos compostos em C++ com o uso da palavra reservada struct. Alguns livros definem o tipo struct como uma espécie de classe simples, mas isso não é totalmente correto, pois já existia na linguagem C, que não é orientada a objetos. 
Struct Jogador
{
string nome;
int pontos;
}
Jogador j1;
j1.nome = “Luiz”;
j1.pontos = 1320;
Em termos de operadores e controle de fluxo, não existe diferença para as demais linguagens derivadas do C. Podemos observar, no exemplo seguinte, as estruturas de controle de fluxo for e if sendo utilizadas, além do cin para entrada de dados.
#include <iostream>
using namespace std;
main() {
int soma = 0, b;
for (int a = 1; a <= 10; a++) {
cout << “Digite um número:”;
cin >> &b;
if (b%2 == 0) soma += b;
}
cout << “A soma dos pares será “ << soma << endl;
return 0;
}
Algo bastante diferente entre o C# e o C++ é a necessidade de arquivos header no C++. Eles guardam apenas as assinaturas de funções e classes que serão implementadas no arquivo cpp de nome equivalente, permitindo a importação a partir de outros arquivos de código-fonte.
[calculadora.h]
int somar(int a, int b);
[calculadora.cpp]
#include “calculadora.h”
int somar(int a, int b) {
return a + b;
}
Você pode observar, nos códigos apresentados, que apesar de trazer todo o ferramental necessário para a implementação orientada a objetos, o C++ não exige que seja feito dessa forma. De qualquer maneira,

Continue navegando