Você está na página 1de 191

Este trabalho est licenciado sob uma Licena Creative Commons Atribuio-NoComercialCompartilhaIgual 4.0 Internacional.

Para ver uma cpia desta licena, visite


http://creativecommons.org/licenses/by-nc-sa/4.0/.
Capa: Alexandre Ferreira e Sean Albuquerque Imagem de fundo extrada da Unreal Engine 4, sem
qualquer efeito de ps-produo aplicada alm dos filtros do motor grfico.
Brasil novembro de 2016

Unreal 4

Nota dos Autores


O contedo aqui abordado possui teor informativo educacional sem fins lucrativos.
Deixamos expressamente claro que est apostila pode ser utilizada tanto em
cursos ou salas de aulas como tambm por qualquer entusiasta individual que
queira desbravar um contedo em portugus que envolva a Unreal 4, e a
programao visual Blueprints, de forma a sair um pouco do Abc bsicos que se
encontra normalmente nos contedos gratuitos em nosso idioma.
Como mencionado anteriormente, est apostila pode ser impressa e tomada como
auxilio de qualquer curso voltado a tecnologia abordado aqui, desde que no se
cobre nada por ela e que seus autores sejam devidamente mencionados e
creditados.

Sumrio
Sumrio
Configurando Player Character ............................................................................... 8
Configuraes Iniciais ........................................................................................ 10
Axis e Action Mappings ...................................................................................... 17
Animation Blueprint ............................................................................................ 33
Blend Space 1D .................................................................................................. 38
Editando Animaes ........................................................................................... 45
Configurando Animao de Pulo ........................................................................ 48
Concluso .......................................................................................................... 51
Configurando Player Character ............................................................................. 53
Configuraes Iniciais ........................................................................................ 55
Axis e Action Mappings ...................................................................................... 62
Game Mode........................................................................................................ 66
Configurando Movimento ................................................................................... 69
Animation Blueprint ............................................................................................ 74
Blend Space 1D .................................................................................................. 79
Editando Animaes ........................................................................................... 85
Configurando Animao de Pulo ........................................................................ 89
Concluso .......................................................................................................... 92
Adicionando Animaes ........................................................................................ 93
Template do projeto ........................................................................................... 95
Adicionando Animaes Com Animation Motage ............................................. 103
Inteligncia Artificial I.......................................................................................... 113
Template do projeto ......................................................................................... 115
Configurando a IA ............................................................................................ 116
Programando a IA............................................................................................. 119
Questo: ........................................................................................................... 120
rea de atuao Nav Mesh ............................................................................ 120
Concluso ........................................................................................................ 122
Aguando a curiosidade ................................................................................... 122
Inteligncia Artificial II......................................................................................... 123
Template do projeto ......................................................................................... 125
Lista de Passos:................................................................................................. 125

Organizando os diretrios ................................................................................ 126


Sistema Chave&Porta / Pontuao I .................................................................. 128
Criando a porta ................................................................................................ 132
O elevador ....................................................................................................... 134
Controle de estados ......................................................................................... 135
Programao no Player (Jogador)..................................................................... 136
Sistema Chave Porta / Pontuao II................................................................... 137
Chaves ............................................................................................................. 137
Portas ............................................................................................................... 137
Elevador ........................................................................................................... 139
Checkpoint....................................................................................................... 140
Zona da morte .................................................................................................. 141
O inimigo (IA)................................................................................................... 143
Subindo nveis! ................................................................................................. 146
Inteligncia Artificial III ....................................................................................... 150
Template do projeto ......................................................................................... 152
Lista de Passos:................................................................................................. 152
Configurao inicial do projeto ........................................................................ 152
Game design .................................................................................................... 155
Qual estado eu incio ........................................................................................ 156
Resumo de funes e variveis ......................................................................... 157
Existe algum player prximo de mim? ............................................................. 158
Onde est o player onde irei me posicionar? ................................................... 161
A que distncia do player devo ficar em guarda? Ou sair da guarda?............... 166
Quando que eu posso atacar? ........................................................................... 166
Introduo a interface Grfica .............................................................................. 173
Configuraes Iniciais ...................................................................................... 175
GUI ................................................................................................................... 175
Sistema de Health ............................................................................................. 182
Criando Regenerador de Health ....................................................................... 186
Concluso ............................................................................................................ 190
Referncia Bibliogrfica ....................................................................................... 191

Configurando Player Character


Third Person

Configurando Player Character

Third Person
Neste captulo veremos como configurar um personagem jogvel a partir de um
projeto Blank da Engine Unreal 4, convertendo o projeto para a jogabilidade Third
Person. Iremos definir seus controles de interao bem como suas animaes de
resposta.

Configuraes Iniciais
Como dito anteriormente, este projeto ter como base um template Blank, com isso
selecione este template, certifique-se de estar na aba Blueprint, e no C++.

Aps o Unreal Editor ter iniciadocrie uma pasta para o personagem que voc deseja
trazer, dentro desta paste crie mais 3 pastas, para Textura, Material e Animao.
Feito isso clique no boto Import localizado no menu Content Browser.

Traga o modelo 3D do personagem que deseja configurar. importante certificar-se


que este modelo possua esqueleto, caso contrrio no ser possvel atrelar as
animaes a ele.

Este painel possui configuraes de importao, ele dividido em 4 abas:


Configuraes de Mesh; Animao; Transformao e Materal. No faremos
alteraes neste menu para o nosso personagem, mas caso voc queira trazer
animaes junto do mesh marque Import Animations, para alterar a escala do
personagem caso ele venha muito pequeno ou muito grande para Engine reimporte
e configure Import Uniform Scale. Caso voc prefira configurar o material, do zero,
dentro da Unreal, desmarque Import Materials ou Import Textures.

Alm do mesh mais 2 arquivos so importados Physics Assets e o Skeleton. Caso seu
modelo tenha vindo com muitos materiais e texturas soltos organize-os nas pastas
correspondentes. Depois do mesh importado e organizado iremos agora criar uma
Classe Blueprint do tipo Character. Para isso clique com o boto direito do mouse
num espao vazio dentro da pasta do Player, e escolha a opo Blueprint Class.

Aps informar que queremos criar uma nova classe Blueprint devemos agora
escolher qual tipo de classe queremos criar. Interagiremos agora com o painel Pick
Parent Class, para nosso player devemos escolher Character.

Nomeie a nova classe como quiser, uma dica colocar as siglas BP depois do nome
escolhido para identificar com facilidade no futuro, que se trata de uma classe
Blueprint.

Vamos agora configurar nosso Player Blueprint, clique duas vezes no seu cone para
abrirmos o editor.

No painel Components clique na opo Mesh. Agora v


no painel Details (a direita) e na aba Mesh abara as
opes clicando na seta ao lado de None. Escolha o
modelo 3D do player que voc acabou de importar.

Normalmente ele vem rotacionado de forma diferente das configuraes do player,


para posicion-lo de forma correta basta girar o mesh at o lado da frente dele
respeitar a direo que o ArrowComponent aponta, -90 graus no eixo Z no nosso
exemplo.

Depois disso interessante fazer o mesh do personagem respeitar a altura da


capsula, suba-o at que seus ps fiquem dentro da base da capsula.

Agora vamos adicionar 2 componentes essenciais para nosso Player. Clique no boto
verde Add Component, fica no topo do painel Component. Procure por ApringArm
e clique nele para adicionar.

Agora procure por Camera para adicionar este componente tambm.

O SpringArm responsvel por regular a distncia da cmera para o Player com isso
a cmera deve estar atrelada a ele. Para atrelarmos a cmera aqui devemos torna-la
Child do SpringArm, arraste a cmera at o SrpingArm e solte nele para isso. Note
que depois disso a cmera foi sozinha at a outra extremidade do SpringArm.

Feito isso clique em SrpingArm e no painel Details marque a opo Use Pawn
Control Rotation. Essa opo nos garantir um funcionamento correto da rotao
do player, depois de empregarmos os devidos cdigos de movimento e rotao
faremos outras configuraes por aqui.
Feito isso definimos a aparncia de nosso Player Character, agora precisamos definir
seus controles e em seguida configurar as animaes.
No Level Editor, clique em Edit e depois em Project Settings.

Axis e Action Mappings


Dentro de Project Settings procure do lado esquerdo a opo Input, ela um dos
itens pertencentes a aba Engine.

Agora na opo Bindings ns definimos os mecanismos bsicos de interao de


nosso jogo com as teclas e botes de nossos controles.

O que so AXIS e ACTION MAPPINGS?


Toda ao que o nosso player faz, depende de interaes com botes, ns podemos
setar diretamente na Event Graph do Player a Barra de Espao para pular e o boto
W para correr, ou X do controle para atacar, mas como forma de dinamizar as
definies e padres de nossos controles, possvel criar aqui na aba Bindings os
comandos gerais, e mais tarde instanci-los como Ns Blueprints para definirmos os
cdigos. Isso facilita nossa vida de vrias formas, uma delas caso o nosso game
tenha mltiplos players, as definies bsicas de movimento e cmera que sero as
mesmas para todos podem ser criadas aqui, e n Event Graph de cada criaramos
apenas interaes singulares com outros botes.
O mapeamento de Axis, trabalha interaes que dependem de um eixo para ocorrer,
como o movimento do personagem e da cmera, permitem entradas que tm um
alcance contnuo. J as interaes Actions so para pressionamentos de teclas e
lanamentos, ou seja no so continuas.
Clique 1 vez no + ao lado de Axis Mappings, note que surgiu uma seta ao lado
esquerdo.

Clicando nela acessamos um sub menu.

Agora temos um caixa com o texto NewAxisMapping, e abaixo dela temos um menu
onde possvel escolher teclas para diferentes tipos de interao. Renomeie o texto
da caixa para um texto correspondente aos movimentos de ir para frente e ir para
trs e escolha a tecla do teclado correspondente ao movimento de frente.

A tecla W no teclado foi definida como interao de ir para frente, mas o texto do
comando diz FrenteTras ento precisamos de outra tecla que far o comando
contrrio, para atribuirmos outra tecla a este evendo clicamos no smbolo +, dessa
vez ao lado da caixa de texto que digitamos FrenteTrasCMD.

Agora poderemos atribuir mais uma tecla a esta funo, usaremos o S e para
garantir que ao apertamos ele o personagem v para trs deveremos colocar o valor
negativo em Scale.

Dessa forma ao apertamos S pegaremos os mesmos valores dos futuros cdigos


que atribuiremos a este evento (FrenteTrasCMD) porm esses valores sero
negativos. Para adicionar mais Axis Mappings clique mais uma vez no smbolo + ao
lado de Axis Mappings. Precisaremos de mais 3 eventos de interao e um Action
Mapping.

Conclua repetindo este esquema.

Ns acabamos de definir Eventos de interao com os controles do jogo (no caso


teclado e mouse) esses eventos sero validados quando fazermos a devida interao

deles com os comandos Blueprints responsveis pelo deslocamento do personagem.


Antes de irmos para esse passo, vamos criar outra Classe Blueprint denominada
GameMode.

Game Mode
O GameMode responsvel por algumas definies importantes em nosso projeto,
uma delas justamente a definio de quem personagem que iremos controlar.
Para criar um novo GameMode clique na opo Blueprints na Toolbar e siga o
caminho mostrado na figura abaixo.

Nomeie o novo GameMode como desejar e coloque-o em uma paste adequada nesta
etapa da configurao.

No GameMode Editor v ao painel Detail, mais precisamente a opo Depauf Pawn


Class.

Aps encontrar o nome que voc colocou no seu Player clique nele definindo-o como
o protagonista do jogo.
Para que este GameMode funcione em sua fase voc deve voltar ao Level Editor e ir
no Menu World Settings.

Ele fica em outra aba ao lado do painel Details.

Na opo GameMode Override, clique e escolha o GameMode que voc acabou de


criar.

Caso queira que este mesmo GameMode funcione em todas as fases do seu game de
uma vez s, sem precisar ficar fazendo essa configurao no World Settings, v ao
Project Settings e clique em Maps Modes, ele uma das opes de Projct.

Certifique-se de que o seu GameMode esteja na Aba Defaut GameMode.

Agora retorne ao Editor do nosso PlayerBP.


Configurando Movimento

Caso voc veja essa expanso de Class Defauts ao abrir a classe Blueprint do Player,
e queira voltar a visualizar o Editor da forma padro, basta clicar no texto azul Open
Full Blueprint Editor localizado no topo da aba.
Vamos agora para a Aba Event Graph.

Selecione e delete esses ns nativos. Depois clique com o boto direito e traga os
events Axis e Action que criamos, basta digitar o nome que demos a eles.

Vamos configurar primeiro a interao FrenteTrasCMD. Precisaremos de um n Add


Moviment Input, para dizermos que este evento agora interagir com os inputs de
movimentao.

Precisamos de um Vector como retorno de World Direction, o n Get Forward Vector


justamente trabalha nas direes correspondente, frente e trs.

Fazemos dele a condio de World Direction. Lembre-se de compilar e salvar.

Podemos testar nosso comando agora se quisermos e ao jogar o player na cena ao


apertamos as teclas que escolhemos para FrenteTrasCMD, vamos o personagem se
mover para frente e para trs.

Caso no esteja funcionando corretamente retorne ao passe anterior e confira os


nomes dos Ns e suas Ligaes.
Agora voltemos para o Event Graph do nosso Player e vamos configurar os
movimentos de esquerda e direita.

Repita o n Add Moviment Input mas dessa vez o Vector trabalhar os valores de
esquerda e direita, com isso escolheremos o n Get Right Vector. Se dermos play na
nossa fase agora, alm de se mover para a frente e para trs o personagem se mover
para esquerda e direita tambm.
Mas ele no est girando em seu eixo quando o movemos. Para que ele faa isso
devemos clicar no Self do nosso player, que fica no topo do menu Components.

Depois vamos desmarcar Use Control Rotation YAW, no painel Detail.

Voltando ao Painel Components, dessa vez vamos em CharacterMoviment. Depois


de clicar nesta opo procure no painel Details a opo Orient Rotation To
Movement e marque.

Agora ao dar play no Level ns podemos ver que o personagem gira respeitando o
caminho que fazemos.

Agora para a cmera...

Tudo certo... Porm h alguma coisa errada com a rotao do player, ser que voc
consegue identificar?
Ao posicionarmos a cmera e apertamos para o player seguir, sua orientao
permanece a mesma de quando o Level foi iniciado, ou seja, ele no respeita a
orientao da cmera para mudar de direo, isso no deixa a jogabilidade muito
atrativa.
Para concertar isso precisamos unir os dois Vector, que so as funes de retorno
de nossos eventos Axis a um Get Control Rotation.

Utilizaremos os ns Make rotation e Break Rotation como intermedirios, ligados


pela rotao no eixo YAW

Vamos agora testar se ao rotacionalrmos a cmera o player segue as novas direes


que a cmera determinar como frente, costas e esquerda e direita...

timo, agora vamos configurar os comandos do pulo. Basta adicionar o n Jump e


Stop jump ao evento que criamos.

Perfeito! Nosso player se move para todos os lados, pula e sua cmera orienta seu
eixo de movimentao, e tambm se move bem nos eixos determinados, agora
podemos passar pra o prximo passo, configurar as animaes.

Animation Blueprint
Importe as animaes correspondentes ao seu player, elas tm de ter Idle (animao
onde o personagem encontra-se de p em repouso), andar, correr saltar e caindo.
Na hora de importar a animao marque o Skeleton como o do seu player.

Com as animaes em sua devida pasta, iremos agora criar um Animation Blueprint.

Para criarmos um Animation Blueprint clique com o boto direito em um espao


vazio do Content Browser e siga o caminho ilustrado abaixo.

Nesta prxima opo definimos o esqueleto do personagem, AnimStance e


clicamos em OK.

Este Anim Editor devemos criar um novo Estado de Animao para


prosseguirmos. Clique com o boto direito do mouse e digite Add New State
Machine.

Renomeie o novo State Machine como achar melhor e faa a ligao demonstrada
abaixo.

Clique duas vezes no State Machine que voc adicionou para entrar em outra
camada da edio de animaes.

O n Entry define o estado primrio da animao, tudo que ligarmos a ele ser
imediatamente executado. Vamos fazer um pequeno teste. Note que na aba abaixo
denominada Asset Bowser esto listadas todas as animaes que importamos para
este personagem. Clique em uma delas e arraste at ao lado de Entry.
Agora puxe uma ligao de Entry at o n que contm a animao que arrastamos.

Para testarmos nosso Animation Blueprint precisamos selecion-lo no Blueprint


de nosso player, ento vamos compilar e salvar essa animao e abrir o PlayerBP.
Clique no Mesh do player na aba Components, depois no painel Details procure
Anim Class.

Procure na lista que aparece o Animation Blueprint que voc criou e clique nele
para defin-lo para seu personagem.
Repare que assim que fazemos isso o personagem incorpora automaticamente a
animao que ligamos ao n Entry.

Caso dermos Player em nosso jogo agora, notamos que, no iporta qual comando
dermos o personagem responder a todos com a mesma animao. Isso no
interessante para nosso projeto, ento vamos prosseguir para o prximo passo.
Entendemos agora como funciona a interao de animaes com o Entry.
Precisamos agora fazer com que o personagem produza animaes mais realistas
de respostas, como ficar parado quando no o movemos e dobrar os joelhos e
impulsionar-se para cima quando apertamos o comando de pular. Para o primeiro
exemplo precisamos criar um Blad Space 1D.

Blend Space 1D
Clique com o boto direito no Content Browser e siga mais uma vez a imagem
abaixo para criar um Blend Space 1D
Blend Spaces so Assets especiais que permitem um arranjo e mistura de
animaes com base nos valores de duas entradas. A mistura simples entre duas
animaes com base em uma nica entrada pode ser realizada usando um dos ns
de mistura padro disponveis em Animation Blueprints. Os Blend Spaces fornecem
um meio de fazer misturas mais complexas
entre vrias animaes baseadas em mltiplos valores.

Nomeie o BlendSpace levando em conta que havero trnasies de


estados de animao, como Parado, andando e correndo, sempre
bom deixar uma pista no texto que nomamos nossas classes, do que
essas se tratam.

Para configurarmos nossa Mistura de animaes precisamos colocar uma animo


para o estado zero e outra em outro ponto em que o personagem aumente sua
velocidade.

Vamos arrastar a animao de Idle do Asset Browser at o marco 0 na linha de


transio.

Agora vamos colocar a animao em que personagem corre no marco 100.

Note que transitar o mouse entre os 2 estados vemos a transio suave dos
mesmos. Agora criamos uma animao de transio, para que o nosso personagem
saia do estado repouso para o movimento de forma mais agradvel aos nossos
olhos.
Precisamos agora voltar ao Animation Blueprint para configurarmos corretamente
nosso Blend Space l. Salve e abra o Animation.

Delete esse n que ligamos a Entry, como teste. E agora arraste nossa recm-criada
Blend Space 1D para essa mesma ligao.

Clique 2 vezes para acessar o n que contm nosso BlendSpace 1D.


Ns vemos agora um n que representa uma instancia de nosso BlendSpace 1D, ele
contm uma condio None, que possui um zero, seguido de uma vrgula e um
monte de outros zeros. Vamos entender de que forma essa condio influencia na
nossa BlendSpace 1D? lembra que l colocamos a animao Idle no marco 0 e
correr no marco 100? Ento veja o que acontece com a figura do seu player quando
digitamos 100 na condio None e compilamos.

O personagem no topo esquerdo agora corre. Isso acontece pois acabamos de


acessar aquela reta da Blend Space 1D. O processo que vamos iniciar agora nos
garantir que essa mesma reta seja acessada por nossos botes de interao.

Crie uma varivel Float com o nome Velocidade e a arraste pra cena a conectando
como condio de nossa BlendSpace1D.

Agora vamos na aba ao lado EventGraph.

Arraste a varivel, dessa vez como Set, e faa a seguinte ligao.

Para acessarmos os Inputs do personagem precisamos dos ns Get Velocity e


Vector Lengh, arraste uma ligao de Try Get Pawn Owner e chame um n depois o
outro.

Vamos agora testar no game nosso progresso.

Perfeito!
Agora vamos a animao de Pulo.
Voltemos para Animation BP.

Editando Animaes

Precisamos criar um esquema com 3 animao para o pulo, uma animao de


incio de pulo, outra para quando o personagem estiver em queda e outra com o
final do pulo, porm temos no exemplo 2 animaes de pulo, uma em que o
personagem inicia um pouco antes do salto e termina um pouco depois de pousar
no cho, e outra em que o personagem est caindo at que encontra o cho. Ns
temos ento de editar estas duas animaes para funcionarem corretamente
dentro de nosso esquema. Para isso v at a pasta de animaes e duplique a
animao de Pulo.

Clique 2 vezes para editar a do incio.


Pause a animao para trabalhar melhor. Posicione a barra vermelha manualmente
um pouco antes do personagem tirar os ps do cho, pouqussimos frames antes.

Clique com o boto direito sobre a posio escolhida e apague os frames iniciais.

Mova manualmente a barrinha vermelha at um pouco depois que os ps saem do


cho, e apague os frames depois da marcao atual.

Salve e pronto temos o incio do nosso pulo. Vamos abrir agora a prxima
animao, Pulo Final.
Dessa vez mova os frames at antes dos ps retornarem ao cho, e apague os
anteriores.

Depois que ele encostar no cho e dobrar um pouquinho os joelhos apague os


frames seguintes.

Salve. Caso a animao de queda precise de edio faa tambm.

Configurando Animao de Pulo


Vamos agora voltar ao Animation Blueprint.

Arraste as 3 animaes para ficarem nesse esquema mostrado. Agora vamos fazer
as ligaes entre esses estados, comeando do Bland Space 1D para Pulo_inicio e
terminando de Pulo_Final a Bland Space 1D.

Note que agora nossas ligaes possuem um crculo branco no meio, ai que
definiremos a condio de transio do pulo, e parte do processo de interao com
os controladores.
Clique 2 vezes no crculo entre a Bland Space 1D e Pulo_inicio.

Devemos aqui criar uma varivel Bolean que indique se o pulo verdadeiro ou
falso.

Repita os seguintes esquemas respectivamente para os prximos ns.

Antes de irmos para o prximo passo certifique-se de que todas as animaes no


esto em Loop. Clique duas vezes em cada um dos ns das animaes da sequncia
de pulo e desmarque Loop Animator. Repita isso nas 3 animaes de pulo.

Concluso
Agora vamos ao EventGraph e fazemos o seguinte esquema para acessarmos a
animao de pulo corretamente ao apertar a Barra de Espao no game.

Vamos ao teste.

Perfeito!
E assim conclumos nossas configuraes bsicas para um Player de um prjeto
Third Person.

Configurando Player Character


Side Scroller

Configurando Player Character


Side Scroller
Neste captulo veremos como configurar um personagem jogvel a partir de um
projeto Blank da Engine Unreal 4, convertendo o projeto para a jogabilidade Side
Scroller. Iremos definir seus controles de interao bem como suas animaes de
resposta.

Configuraes Iniciais
Como dito anteriormente, este projeto ter como base um template Blank, com isso
selecione este template, certifique-se de estar na aba Blueprint, e no C++.

Aps o Unreal Editor ter iniciadocrie uma pasta para o personagem que voc deseja
trazer, dentro desta paste crie mais 3 pastas, para Textura, Material e Animao.
Feito isso clique no boto Import localizado no menu Content Browser.

Traga o modelo 3D do personagem que deseja configurar. importante certificar-se


que este modelo possua esqueleto, caso contrrio no ser possvel atrelar as
animaes a ele.

Este painel possui configuraes de importao, ele dividido em 4 abas:


Configuraes de Mesh; Animao; Transformao e Materal. No faremos
alteraes neste menu para o nosso personagem, mas caso voc queira trazer
animaes junto do mesh marque Import Animations, para alterar a escala do
personagem caso ele venha muito pequeno ou muito grande para Engine reimporte
e configure Import Uniform Scale. Caso voc prefira configurar o material, do zero,
dentro da Unreal, desmarque Import Materials ou Import Textures.

Alm do mesh mais 2 arquivos so importados Physics Assets e o Skeleton. Caso seu
modelo tenha vindo com muitos materiais e texturas soltos organize-os nas pastas
correspondentes. Depois do mesh importado e organizado iremos agora criar uma
Classe Blueprint do tipo Character. Para isso clique com o boto direito do mouse
num espao vazio dentro da pasta do Player, e escolha a opo Blueprint Class.

Aps informar que queremos criar uma nova classe Blueprint devemos agora
escolher qual tipo de classe queremos criar. Interagiremos agora com o painel Pick
Parent Class, para nosso player devemos escolher Character.

Nomeie a nova classe como quiser, uma dica colocar as siglas BP depois do nome
escolhido para identificar com facilidade no futuro, que se trata de uma classe
Blueprint.

Vamos agora configurar nosso Player Blueprint, clique duas vezes no seu cone para
abrirmos o editor.

No painel Components clique na opo Mesh. Agora v


no painel Details (a direita) e na aba Mesh abara as
opes clicando na seta ao lado de None. Escolha o
modelo 3D do player que voc acabou de importar.

Normalmente ele vem rotacionado de forma diferente das configuraes do player,


para posicion-lo de forma correta basta girar o mesh at o lado da frente dele

respeitar a direo que o ArrowComponent aponta, -90 graus no eixo Z no nosso


exemplo.

Depois disso interessante fazer o mesh do personagem respeitar a altura da


capsula, suba-o at que seus ps fiquem dentro da base da capsula.

Agora vamos adicionar 2 componente essenciais para nosso Player. Clique no boto
verde Add Component, fica no topo do painel Component. Procure por ApringArm
e clique nele para adicionar.

Agora procure por Camera para adicionar este componente tambm.

O ApringArm responsvel por regular a distncia da cmera para o Player com isso
a cmera deve estar atrelada a ele. Para atralarmos a cmera aqui devemos torna-la
Child do ApringArm, arraste a cmera at o Srping Arm e solte nele para isso. Note
que depois disso a cmera foi sozinha at a outra extremidade do ApringArm.

Feito isso clique em SrpingArm e no painel Details marque a opo Use Pawn
Control Rotation. Vamos fazer mais 2 configuraes agora. Ainda no painel Detail,
vamos inverter a posio da cmera para com o player aumentar a altura do brao,
ponha - 500 em Target Arm Length e em target Offset marcamos 150 somente no
eixo Z, isso erguer um pouco o SpringArm.

Agora vamos clicar na Camera, l no painel Components, para ajustar sua viso do
player. No seu painel Detail em Rotation eixo y vamos colocar o valor 334, isso far
com que ela se centralize no Player.
Feito isso definimos a aparncia de nosso Player Character, agora precisamos definir
seus controles e em seguida configurar as animaes.
No Level Editor, clique em Edit e depois em Project Settings.

Axis e Action Mappings


Dentro de Project Settings procure do lado esquerdo a opo Input, ela um dos
itens pertencentes a aba Engine.

Agora na opo Bindings ns definimos os mecanismos bsicos de interao de


nosso jogo com as teclas e botes de nossos controles.

O que so AXIS e ACTION MAPPINGS?


Toda ao que o nosso player faz, depende de interaes com botes, ns podemos
setar diretamente na Event Graph do Player a Barra de Espao para pular e o boto
W para correr, ou X do controle para atacar, mas como forma de dinamizar as
definies e padres de nossos controles, possvel criar aqui na aba Bindings os
comandos gerais, e mais tarde instanci-los como Ns Blueprints para definirmos os
cdigos. Isso facilita nossa vida de vrias formas, uma delas caso o nosso game
tenha mltiplos players, as definies bsicas de movimento e cmera que sero as
mesmas para todos podem ser criadas aqui, e n Event Graph de cada criaramos
apenas interaes singulares com outros botes.

O mapeamento de Axis, trabalha interaes que dependem de um eixo para ocorrer,


como o movimento do personagem e da cmera, permitem entradas que tm um
alcance contnuo. J as interaes Actions so para pressionamentos de teclas e
lanamentos, ou seja no so continuas.
Clique 1 vez no + ao lado de Axis Mappings, note que surgiu uma seta ao lado
esquerdo.

Clicando nela acessamos um sub menu.

Agora temos um caixa com o texto NewAxisMapping, e abaixo dela temos um menu
onde possvel escolher teclas para diferentes tipos de interao. Renomeie o texto
da caixa para um texto correspondente aos movimentos de ir para Direita e ir para
Esquerda e escolha a tecla do teclado correspondente ao movimento de Direita.

A tecla D no teclado foi definida como interao de ir para direita, mas o texto do
comando diz DirEsqMov ento precisamos de outra tecla que far o comando
contrrio, para atribuirmos outra tecla a este evendo clicamos no smbolo +, dessa
vez ao lado da caixa de texto que digitamos DirEsqMov.

Agora poderemos atribuir mais uma tecla a esta funo, usaremos o A e para
garantir que ao apertamos este boto o personagem v para esquerda deveremos
colocar o valor negativo em Scale.
Dessa forma ao apertamos A pegaremos os mesmos valores dos futuros cdigos
que atribuiremos a este evento (DirEsqMov) porm esses valores sero negativos.

Conclua repetindo este esquema.

Ns acabamos de definir Eventos de interao com os controles do jogo (no caso


teclado e mouse) esses eventos sero validados quando fazermos a devida interao
deles com os comandos Blueprints responsveis pelo deslocamento do personagem.
Antes de irmos para esse passo, vamos criar outra Classe Blueprint denominada
GameMode.

Game Mode
O GameMode responsvel por algumas definies importantes em nosso projeto,
uma delas justamente a definio de quem personagem que iremos controlar.
Para criar um novo GameMode clique na opo Blueprints na Toolbar e siga o
caminho mostrado na figura abaixo.

Nomeie o novo GameMode como desejar e coloque-o em uma paste adequada nesta
etapa da configurao.

No GameMode Editor v ao painel Detail, mais precisamente a opo Depauf Pawn


Class.

Aps encontrar o nome que voc colocou no seu Player clique nele definindo-o como
o protagonista do jogo.
Para que este Game Mode funcione em sua fase voc deve voltar ao Level Editor e ir
no Menu World Settings.

Ele fica em outra aba ao lado do painel Details.

Na opo GameMode Override, clique e escolha o GameMode que voc acabou de


criar.

Caso queira que este mesmo GameMode funcione em todas as fases do seu game de
uma vez s, sem precisar ficar fazendo essa configurao no World Settings, v ao
Project Settings e clique em Maps Modes, ele uma das opes de Projct.

Certifique-se de que o seu GameMode esteja na Aba Defaut GameMode.

Agora retorne ao Editor do nosso PlayerBP.

Configurando Movimento

Caso voc veja essa expanso de Class Defauts ao abrir a classe Blueprint do Player,
e queira voltar a visualizar o Editor da forma padro, basta clicar no texto azul Open
Full Blueprint Editor localizado no topo da aba.
Vamos agora para a Aba Event Graph.

Selecione e delete esses ns nativos. Depois clique com o boto direito e traga os
events Axis e Action que criamos, basta digitar o nome que demos a eles.

Vamos configurar primeiro a interao DirEsqMov. Precisaremos de um n Add


Moviment Input, para dizermos que este evento agora interagir com os inputs de
movimentao. Em World Direction adicione o valor de - 1.0 a Y.

Podemos testar nosso comando agora se quisermos e ao jogar o player na cena ao


apertamos as teclas que escolhemos para DirEsqMov, vamos o personagem se
mover para direita e para esquerda.

Caso no esteja funcionando corretamente retorne ao passe anterior e confira os


nomes dos Ns e suas Ligaes.
Mas ele no est girando em seu eixo quando o movemos. Para que ele faa isso
devemos clicar no Self do nosso player, que fica no topo do menu Components.

Depois vamos desmarcar Use Control Rotation YAW, no painel Detail.

Voltando ao Painel Components, dessa vez vamos em CharacterMoviment. Depois


de clicar nesta opo procure no painel Details a opo Orient Rotation To
Movement e marque.

Agora ao dar play no Level ns podemos ver que o personagem gira respeitando o
caminho que fazemos.
timo, agora vamos configurar os comandos do pulo. Basta adicionar o n Jump e
Stop jump ao evento que criamos.

Perfeito! Nosso player se move para direita e esquerda e pula! Agora podemos
passar para o prximo passo, configurar as animaes.

Animation Blueprint
Importe as animaes correspondentes ao seu player, elas tm de ter Idle (animao
onde o personagem encontra-se de p em repouso), andar, correr saltar e caindo.
Na hora de importar a animao marque o Skeleton como o do seu player.

Com as animaes em sua devida pasta, iremos agora criar um Animation Blueprint.

Para criarmos um Animation Blueprint clique com o boto direito em um espao


vazio do Content Browser e siga o caminho ilustrado abaixo.

Nesta prxima opo definimos o esqueleto do personagem, AnimStance e clicamos


em OK.

Este Anim Editor devemos criar um novo Estado de Animao para


prosseguirmos. Clique com o boto direito do mouse e digite Add New State
Machine.

Renomeie o novo State Machine como achar melhor e faa a ligao demonstrada
abaixo.

Clique duas vezes no State Machine que voc adicionou para entrar em outra
camada da edio de animaes.

O n Entry define o estado primrio da animao, tudo que ligarmos a ele ser
imediatamente executado. Vamos fazer um pequeno teste. Note que na aba abaixo
denominada Asset Bowser esto listadas todas as animaes que importamos para
este personagem. Clique em uma delas e arraste at ao lado de Entry.
Agora puxe uma ligao de Entry at o n que contm a animao que arrastamos.

Para testarmos nosso Animation Blueprint precisamos selecion-lo no Blueprint de


nosso player, ento vamos compilar e salvar essa animao e abrir o PlayerBP.
Clique no Mesh do player na aba Components, depois no painel Details procure
Anim Class.

Procure na lista que aparece o Animation Blueprint que voc criou e clique nele
para defin-lo para seu personagem.
Repare que assim que fazemos isso o personagem incorpora automaticamente a
animao que ligamos ao n Entry.

Caso dermos Player em nosso jogo agora, notamos que, no iporta qual comando
dermos o personagem responder a todos com a mesma animao. Isso no
interessante para nosso projeto, ento vamos prosseguir para o prximo passo.
Entendemos agora como funciona a interao de animaes com o Entry.
Precisamos agora fazer com que o personagem produza animaes mais realistas
de respostas, como ficar parado quando no o movemos e dobrar os joelhos e
impulsionar-se para cima quando apertamos o comando de pular. Para o primeiro
exemplo precisamos criar um Blad Space 1D.

Blend Space 1D
Clique com o boto direito no Content Browser e siga mais uma vez a imagem
abaixo para criar um Blend Space 1D
Blend Spaces so Assets especiais que permitem um arranjo e mistura de
animaes com base nos valores de duas entradas. A mistura simples entre duas
animaes com base em uma nica entrada pode ser realizada usando um dos ns
de mistura padro disponveis em Animation Blueprints. Os Blend Spaces
fornecem um meio de fazer misturas mais complexas
entre vrias animaes baseadas em mltiplos valores.

Nomeie o BlendSpace levando em conta que havero trnasies de


estados de animao, como Parado, andando e correndo, sempre
bom deixar uma pista no texto que nomamos nossas classes, do que
essas se tratam.

Para configurarmos nossa Mistura de animaes precisamos colocar uma animo


para o estado zero e outra em outro ponto em que o personagem aumente sua
velocidade.

Vamos arrastar a animao de Idle do Asset Browser at o marco 0 na linha de


transio.

Agora vamos colocar a animao em que personagem corre no marco 100.

Note que transitar o mouse entre os 2 estados vemos a transio suave dos
mesmos. Agora criamos uma animao de transio, para que o nosso personagem
saia do estado repouso para o movimento de forma mais agradvel aos nossos
olhos.
Precisamos agora voltar ao Animation Blueprint para configurarmos corretamente
nosso Blend Space l. Salve e abra o Animation.

Delete esse n que ligamos a Entry, como teste. E agora arraste nossa recm criada
Blend Space 1D para essa mesma ligao.

Clique 2 vezes para acessar o n que contm nosso BlendSpace 1D.


Ns vemos agora um n que representa uma instancia de nosso BlendSpace 1D, ele
contem uma condio None, que possui um zero, seguido de uma vrgula e um
monte de outros zeros. Vamos entender de que forma essa condio influencia na
nossa BlendSpace 1D? lembra que l colocamos a animao Idle no marco 0 e
correr no marco 100? Ento veja o que acontece com a figura do seu player quando
digitamos 100 na condio None e compilamos.

O personagem no topo esquerdo agora corre. Isso acontece pois acabamos de


acessar aquela reta da Blend Space 1D. O processo que vamos iniciar agora nos
garantir que essa mesma reta seja acessada por nosso botes de interao.

Crie uma varivel Float com o nome Velocidade e a arraste pra cena a conectando
como condio de nossa BlendSpace1D.

Agora vamos na aba ao lado EventGraph.

Arraste a varivel, dessa vez como Set, e faa a seguinte ligao.

Para acessarmos os Inputs do personagem precisamos dos ns Get Velocity e


Vector Lengh, arraste uma ligao de Try Get Pawn Owner e chame um n depois o
outro.

Vamos agora testar no game nosso progresso.

Perfeito!
Agora vamos a animao de Pulo.
Voltemos para Animation BP.

Editando Animaes

Precisamos criar um esquema com 3 animao para o pulo, uma animao de


inicio de pulo, outra para quando o personagem estiver em queda e outra com o
final do pulo, porm temos no exemplo 2 animaes de pulo, uma em que o
personagem incia um pouco antes do salto e termina um pouco depois de pousar
no cho, e outra em que o personagem est caindo at que encontra o cho. Ns
temos ento de editar estas duas animaes para funcionarem corretamente
dentro de nosso esquema. Para isso v at a pasta de animaes e duplique a
animao de Pulo.

Clique 2 vezes para editar a do incio.


Pause a animao para trabalhar melhor. Posicione a barra vermelha manualmente
um pouco antes do personagem tirar os ps do cho, pouqussimos frames antes.

Clique com o boto direito sobre a posio escolhida e apague os frames iniciais.

Mova manualmente a barrinha vermelha at um pouco depois que os ps saem do


cho, e apague os frames depois da marcao atual.

Salve e pronto temos o incio do nosso pulo. Vamos abrir agora a prxima
animao, Pulo Final.
Dessa vez mova os frames at antes dos ps retornarem ao cho, e apague os
anteriores.

Depois que ele encostar no cho e dobrar um pouquinho os joelhos apague os


frames seguintes.

Salve. Caso a animao de queda precise de edio faa tambm.

Configurando Animao de Pulo


Vamos agora voltar ao Animation Blueprint.

Arraste as 3 animaes para ficarem nesse esquema mostrado. Agora vamos fazer
as ligaes entre esses estados, comeando do Bland Space 1D para Pulo_inicio e
terminando de Pulo_Final a Bland Space 1D.

Note que agora nossas ligaes possuem um crculo branco no meio, ai que
definiremos a condio de transio do pulo, e parte do processo de interao com
os controladores.
Clique 2 vezes no crculo entre a Bland Space 1D e Pulo_inicio.

Devemos aqui criar uma varivel Bolean que indique se o pulo verdadeiro ou
falso.

Repita os seguintes esquemas respectivamente para os prximos ns.

Antes de irmos para o prximo passo certifique-se de que todas as animaes no


esto em Loop. Clique duas vezes em cada um dos ns das animaes da sequncia
de pulo e desmarque Loop Animator. Repita isso nas 3 animaes de pulo.

Concluso
Agora vamos ao EventGraph e fazemos o seguinte esquema para acessarmos a
animao de pulo corretamente ao apertar a Barra de Espao no game.

Vamos ao teste.

Perfeito!
E assim conclumos nossas configuraes bsicas para um Player de um projeto
SideScroller.

Adicionando Animaes
Animation Blueprint e Animation Montage

Adicionando Animaes no State Machine


Neste captulo iremos adicionar animaes ao nossos game characters, deixando as
interaes mais dinmicas e arrojadas. Iremos adicionar direto no State Machine, e
tambm aprenderemos a usar o Animation Montage.

Template do Projeto
Para este projeto precisaremos de um Player j configurado com as animaes
bsicas, como mostrado nos captulos anteriores, e alm dessas outras animaes
como combate e movimentao diferente, para adicionarmos ao projeto.

Importe as novas animaes que adicionaremos ao nosso Player Character, no


exemplo iremos adicionar outra animao de correr, e 3 de combate.
Vamos agora criar um BlendSpace 1D de nosso novo estado de movimentao. (para
informaes sobre como criar uma BlendSpace 1D v a pgina 38)
As animaes deste exemplo faro o personagem parecer estar segurando uma
tocha, porm voc pode usar animaes que faam o personagem parecer ferido ou
andando sobre um lago, ou coisa parecida.

Coloque no frame 0 o Idle deste novo estado, e no frame correspondente ao


MaxWalk Speed, aqui 50, a animao de correspondente ao novo estado correndo.

Anim Graph do Animation Blueprint do player, e entre no State Machine.

Ao abrirmos neste exemplo temos apenas o n advindo do BlandSpace 1D com as


animaes bases do player. Iremos adicionar o novo BlendSpace 1D arrastando-o
para o Anim Graph.

Arraste e solte o novo BlendSpace no Anim Graph. Apartir do primeiro n


Blendspace, puxe uma ligao at o novo n, retorne a partir desse ltimo ao
primeiro com outra ligao logo em seguida, como mostra a figura abaixo.

Acessando o novo n, adicione a varivel correspondente a Velocidade do player


ao n interno do BlendSpace.

Agora devemos clicar 2 vezes nos smbolos redondos que aparecero entre as
ligaes para ter acesso a condio.

Crie uma varivel boleana para a condio de nosso novo estado.

Na condio de ida colocamos a varivel direta com o n nativo Result. J na


condio de volta ao estado anterior, devemos colocar um NOT boleano, entre esses.

Devemos agora criar uma comunicao entre essa condio e o player. Abra ento o
Event Graph do player character e l crie uma varivel boleana, aqui foi criada
Tochamodo.

Feito isso, abra novamente o Animation Blueprint do player e na aba EventGraph,


traga o n Cast To... aparecero algumas opes, escolha a que segue com o nome do
Player Blueprint, no caso do exemplo aqui foi Cast To Third Person Character. No
esquea de conectar Get Player Character a Object em Cast To.

Arraste uma ligao de As (o nome do seu character) e busque a varivel que


acabamos de criar, escolha Get como mostra a figura a cima. Essa varivel ser a
condio da varivel ModoTocha que criamos aqui no Animation Blueprint.

Pronto! Acabamos de determinar que sempre que a varivel Tochamodo no Player


for verdadeira, a varivel ModoTocha no Animation Blueprint tambm ser, e
quando isso ocorre o StateMachine trocar de Blendspace do personagem andando
de Normal para ComTocha.
Essa troca de estados pode ocorrer de vrias formas diferentes, podemos definir no
Event Graph do Player que ao apertar a tecla F Tocha modo ser verdadeira.

Ou podemos colocar Trigger Volume no level e ativarmos em Open Level Blueprint,


a animao de correr com a tocha, somente ao passar nesse Triggler.

Adicionando Animaes Com Animation Motage


Vamos adicionar agora ao mesmo projeto algumas animaes de combate com o
auxlio do Animation Montage.
Primeiro, Importe as animaes de combate. Clique com boto direito sobre cada
uma e siga a imagem abaixo para criar o Animation Montage.

Para organizar melhor nossas animaes, coloque todas as criadas em uma pasta
denominada Animation Montage.

Temos aqui 3 animaes de combate. Agora abra o Animation Blueprint do Player.


Adicione um Defaut Slot entre o StateMachine e o Final Animation Pose.

Clique agora na Lupa, na aba Sethings para nomearmos nosso Slote.

No painel Anim Slot Manager clique na pasta com o texto Add Slot, e nomeie de
acordo com o tipo de animao que voc deseja chamar, no caso do exemplo est
nomeada como Combate.

Agora volte ao Anim Graph e em Slot Name mude o nome do slot para o nome que
acabou de criar.

Definimos com isso um Slot dentro de Animation BLueprint que Puchar filtrar
as montagens de animaes, desde que elas estejam configuradas adequadamente
para pertencerem a este Slot, o que faremos no prximo passo.
Abra o Editor de cada Animation Montage criada e mude DefautGrup como mostra
a figura abaixo:

Voc deve fazer isso em todos os Animations Montage que queira puxar do n
combate.
Agora no Event Graph do Player Blueprint, chame o N Play Anim Montage, e atribua
um boto para ativ-lo.

Na opo Anim Montage, escolha uma das animaes da lista. Tem de ser uma das
que voc acabou de configurar.

Aps compilar podemos conferir que ao Apertamos o boto correspondente ao


evento, o personagem desferir o golpe.

Vamos deixar sua luta mais dinmica agora. Conforme a imagem abaixo arraste uma
ligao de Anim Montage e solte em um local vazio, escolha a opo Promote to a
Variable.

Criamos assim uma varivel capas de carregar nela uma das montagens de
animao.

Para darmos vrios golpes apertando o mesmo boto devemos atribuir entre o
evento e a funo um n chamado Switch on Int.

Esse n permite criarmos nele mltiplos Pins de sadas (output) clicando em Add
Pin. Como temos 3 animaes de golpe vamos adicionar mais 2 Pins.

Vamos agora arrastar nossa varivel Anim Mont e escolher Set, depois criar 2
cpias da mesma.

Como fizemos com Play Anim Montage, vamos adicionar as animaes de combate
direto nas variveis.
Atrinua agora a funo Randim Integer in Rage ao n Switch para que possamos
carregar as animaes com um clique de forma randmica.

Ateno a configurao da funo Random Integer, onde Min e Max setam a


quantidade de Pins que possuem o Switch a ele ligado.
Vamos testar nosso cdigo?

Pronto! Agora podemos transitar entre as 3 animaes de luta de forma randmica


com o mesmo comando.

Inteligncia Artificial I
Perseguio

Inteligncia Artificial I
Projeto Perseguio
Neste capitulo estaremos aprendendo conceitos bsicos sobre inteligncia artificial
dentro da ferramenta Unreal Engine 4, aprenderemos desde tpicos at a
implementao de um sistema de perseguio.

Template do projeto
Precisaremos de um template para iniciarmos nossos estudos. Optei por utilizarmos
template em terceira pessoa, pois no precisaremos nos preocupar com a
implementaes bsica de controle do jogador que j fora visto, bem como a
construo de um mapa para possveis testes.
Lista de Passos:

Executar o Laucher
Criar um projeto em Blueprint
Definir as configuraes iniciais

Primeiramente execute o Launcher da Epic Games e em seguida clique em


Inicializar.

Em seguida surgira uma nova janela. Nela iremos definir as configuraes bsicas
do nosso projeto.
Escolheremos Novo projeto e escolheremos faze-lo em Blueprint, definiremos que
o template a ser usado ser o de terceira pessoa e ento escolheremos o local onde
ser salvo e seu respectivo nome.

Configurando a IA
Com o projeto j criado podemos ento comear a desenvolver nosso inimigo.
Deveremos criar um Character que seja nosso inimigo e ento atribuir a ele um
AIController que ir controlar nosso inimigo, em seguida precisaremos definir uma
rea de atuao e ento colocar o nosso inimigo na cena para que comece a seguir
nosso jogador.

Como j vimos, quando criamos um Character, que nada mais que um Pawn com
algumas funcionalidades caractersticas de player, estamos definindo um
personagem, porm no nele que definimos como iremos controla-lo e sim em seu
PlayerController.
O mesmo ocorre com a inteligncia artificial, precisaremos de um AIController que
ir definir como nosso inimigo ser controlado, ser nele que iremos programar as
decises e aes a serem tomadas.

Criar um novo Character CH_IA1


Fazer Configuraes bsicas
Criar um novo AIController AIC_AI1
Atribuir AIC_AI1 para CH_IA1

Agora criaremos uma nova pasta dentro de Content chamada IA1 e nela iremos criar
um novo Blueprint do tipo Character e definiremos seu nome como CH_IA1, este
ser o nosso inimigo.

Abra o Blueprint que acabamos de criar selecione o componente Mesh na aba


Components e defina qual o Skeletal Mesh que ser usado, neste caso irei usar o
padro.

Defina o Anim Class como ThirdPerson_AnimBP, e posicione seu personagem


como na imagem.

At o momento definimos nosso personagem, mas ainda no definimos quem ir


controla-lo, como este ser um inimigo, no ser controlado pelo jogador e ento
no poderemos usar o PlayerController, neste caso iremos definir que ele ser
controlado por uma inteligncia artificial, ou seja, iremos criar um AIController e
atribuiremos ao personagem este controlador.
Crie um novo Blueprint, mas agora pesquise em All Classes o tipo AIController e
defina seu nome para AIC_IA1.

Ficaremos ento com a seguinte configurao de arquivos.

O prximo passo definir o controlador do nosso CH_IA1 para AIC_IA1. Para isso
devemos abrir o CH_IA1 selecionar em Components o componente self e ento na
aba details altera o valor de AI Controller Class para IAC_IA1.

Pronto com isso nossa configurao da inteligncia artificial est pronta, pois
criamos um personagem e definimos que ele ser controlado pelo controlador de
inteligncia artificial que criamos.

Programando a IA
Agora que temos nosso inimigo configurado vamos programar a IA, ou seja, como
ele ir atuar sobre o local onde est, em nosso caso iremos fazer com que o inimigo
sempre encontre o player e comece a segui-lo para sempre.
Como este um comportamento de controle sobre o inimigo, vamos ter que definir
a programao no AIController que criamos, abra ento o IAC_IA1.
Na aba Event Grath iremos realizar uma pesquisa procurando o Character do
jogador, e em seguida iremos nos mover at ele.

Questo:
Em algumas situaes especificas este cdigo pode gerar um erro. Voc sabe qual ?
Questione com seus colegas como resolve-lo.

rea de atuao Nav Mesh


Nosso inimigo est configurado e sua inteligncia definida. Podemos arrasta-lo para
a cena e dar play, porm ele nada ir fazer pois ele no sabe que ele est em um
mundo e muito menos sabe que pode andar nele. Para que ele saiba de tudo isso e
possa encontrar nosso player devemos informa-lo que est em um mundo e fazemos
isso com o Nav Mesh.
O Nav Mesh uma malha de navegao que ir definir por onde nossa a IA ir se
mover, delimitando assim seu percurso e evitando obstculos que entejam entre o
inimigo e o seu objetivo. Quando uma Nav Mesh est em cena ela ir pintar as
possveis reas de locomoo para que no futuro uma IA saiba por onde andar.
Vamos ento criar uma Nav Mesh. Na aba principal do projeto v para a sub aba
Modes em Place pesquise Nav Mesh. Arraste ela para a cena como na imagem. A
rea verde em destaque onde a IA pode andar.

Por padro a rea verde no fica amostra. Devemos habilit-la clicando em Show na
prpria View Port e ento clicar em Navigation como na imagem abaixo.

Sabendo que a rea verde onde a IA poder se locomover, podemos perceber que
ela nunca ir encontrar ou chegar at nosso player, devemos ento redimensionar o
Nav Mesh para que ocupe toda a nossa cena como na imagem abaixo.
Pronto! Podemos agora executar o jogo e ver nosso inimigo perseguindo o player
para onde quer que ela v.

Concluso
Trabalhamos apenas com Blueprints, porm, existem ferramentas especificas para
a programao de IA como BalckBoards, BehaviorTree, mas falaremos disso mais
adiante.

Aguando a curiosidade
Conseguimos ento criar um inimigo com uma inteligncia artificial bem simples,
ele inicia encontrando o player e comea a segui-lo. Seria mais interessante que ele
comeasse a segui-lo apenas se chegssemos muito prximo dele, como faramos
isso?
Podemos ver ainda que existe uma rea verde nas escadas levando at um nvel mais
alto, mas se no existisse essa escada ele no subiria, voc consegue corrigir isso?
Na prxima apostila falaremos sobre esses problemas e suas solues. At l.

Inteligncia Artificial II

Inteligncia Artificial II
Projeto Perseguio II
Nesta apostila estaremos aprendendo mais sobre inteligncia artificial dentro da
ferramenta Unreal Engine 4, iremos construir um sistema de chave & porta para
passarmos de nvel bem como checkpoints, iremos ainda nos aprofundar na criao
de um sistema inteligente.
O Curso consiste em trs apostilas sendo que est conter os tpicos medianos sobre
inteligncia artificial em jogos digitais. Continuaremos trabalhando com Blueprints
para que na Inteligncia artificial III voc consiga perceber o porqu de utilizar o
sistema de IA da Unreal engine 4 ao invs de Blueprint puro;

Template do projeto
Precisaremos de um template para iniciarmos nossos estudos. Optei por utilizarmos
template em Side Scroller, pois no precisaremos nos preocupar com a
implementao bsica de controle do jogador que j fora visto, bem como a
construo de um mapa para possveis testes.

Lista de Passos:
Executar o Laucher
Criar um projeto em Blueprint
Definir as configuraes iniciais
Primeiramente execute o Launcher da Epic Games e em seguida clique em
Inicializar.

Em seguida surgir uma nova janela. Nela iremos definir as configuraes bsicas
do nosso projeto.
Escolhemos Novo projeto e escolhemos faz-lo em Blueprint, definiremos que o
template a ser usado ser o de Side Scroller e ento escolhemos o local onde ser
salvo e seu respectivo nome, incorpore o StarterContent ao projeto.

Organizando os diretrios
Com o projeto j criado podemos ento comear organizando nosso diretrio,
devemos criar uma pasta chamada AI2 na raiz do Content logo em seguida mova o
mapa padro do projeto para esta pasta. Faa o mesmo para SideScrollerCharacter
e retomei-o para Jogador.

Vamos alterar as configuraes de mapa, pois como mudamos de local quando


abrirmos a Unreal Engine novamente ela no ir carregar automaticamente o mapa
atual. Para isso v em Edit ->Project Setting -> Maps & Mode de defina o mapa atual
como padro.

Vamos iniciar o desenvolver nosso cenrio para que possamos testar toda a nossa
programao como sistema Chave&Porta, inteligncia artificial, elevadores entre
outros.
Na imagem abaixo podemos ver como ficou o layout do mapa, utilizando e
duplicando apenas os prprios blocos que j esto na cena, recomendamos que no
crie um layout novo, mas sim replique este para que no haja obstculos
inesperados em nosso aprendizado, depois podem ficar vontade em criar os seus...
alis fica atividade extra trazer mapas diferentes com o que aprender nesta apostila.

Sistema Chave&Porta / Pontuao I


Neste sistema o jogador dever achar e coletar uma chave para uma determinada
porta, o mecanismo poderia ser usado para outros fins como pegar uma armadura
aprova de fogo para ento poder lutar contra um drago.
Podemos perceber que tanto as moedas como as chaves sero coletadas certo?
Temos ento duas opes:
Opo 1
o Criar uma Blueprint Actor para cada uma delas e programar se o
player as tocou e ento executar a soma de pontos ou guardar a chave
consigo.
Opo 2
o Criar uma classe Actor base que determine se o player tocou aquele
objeto, e criar mais duas classes que implementam apenas as
respectivas aes.
Se formos analisar na opo 2 temos 3 arquivos enquanto na opo 1 teremos
apenas 2, voc pode pensar Para que criar 3 arquivos se 2 j do conta do recado?

Realmente para este exemplo no parece que seria vantajoso, mas se formos
analisar todo o projeto dessa apostila veremos que existe coisas em comuns entre
Chave, Porta, Checkpoint, Moedas, Zona de morte, Trigger ...
Para cada um deles teremos de inserir um BoxCollider e detectar o evento de
BeginOverlap e EndOverlap que so os eventos que determinam se alguma coisa
tocou neles ou se deixou de tocar, logo para no termos de reconfigurar todo o
Blueprint toda vez que criarmos algo, basta utilizar este objeto base, a isso
chamamos de Herana.
Vamos ento pela opo 2 para treinarmos esse novo conceito j que a opo 1,
vocs j sabem como fazer.
Crie um Actor chamado A_ObjetoBase, adicione uma Box Collision chame-o de
Detector e defina como root da cena, este servira para nos avisar se algum tocou
neste objeto.

Vamos ento realizar algumas tarefas,


1. Acione o BeginOverlap do Detector.
2. Na aba EventGraph crie um CustomEvent chamado Jogador Detectado
com uma varivel de entrada chamada Jogador, este evento ser chamado
quando um player for detectado.
3. Cri outro CustomEvent da mesma forma e renomeei para Jogador Perdido
4. Na sequncia do BeginOverlap na aba EventGraph faa um Cast do varivel
jogador confirmando se realmente um jogador, caso seja execute o evento
Jogador Detectado.
5. Na sequncia do EndOverlap na aba EventGraph faa um Cast do varivel
jogador confirmando se realmente um jogador, caso seja execute o evento
Jogador Perdido.

Tudo dever ficar como na imagem abaixo.

Agora poderemos criar nossos Blueprints que herdaram este objeto, o que
precisaremos fazer depois apenas especificar o que vai ser executado quando
Jogador Detectado e jogador Perdido forem executados, resumindo no
precisaremos criar tudo de novo a cada novo ator da cena.
Agora crie um ator que ir herdar a classe A_ObjetoBase e chame-o de A_Chave da
seguinte forma:

No EventGraph deste arquivo crie um novo CustomEvent e coloque o mesmo nome


e entradas que definimos para o A_ObjetoBase Faa isso para o Jogador Detectado
e defina uma nova ao que ser executada apenas para a chave, isso ir substituir
a ao da classe pai.
Veja como ficou para a Chave:

Perceba quecomo utilizamos Herana, nosso ator A_Chave j tem um Box Collider
bem como os eventos de deteco, o que precisamos fazer Recriar o CustomEvent
com o mesmo nome e parametros, para que este ator tenha uma execuao diferente
dos outros.

Repita esses passos criando agora o ator A_Moeda:

Antes de colocarmos a chave e moeda em cena para testar vamos adicionar seus
respectivos cones.
Cri uma pasta chamada cones dentro de IA2 e importe as imagens do curso, escolha
a imagem Icone_Chave clique sobre ela com o boto direito do mouse em Create
Sprite. Faa o mesmo processo para as outras imagens ao final teremos esta
configurao.

Volte para o A_ObjetoBase e adicione o componente Arrow e faa com que ele seja
o root da hierarquia veja que esse mesmo componente apareceu para a chave e a
moeda.
Volte para a A_Chave e adicione um novo componente chamado PaperSprite
informe o Sprite correspondente e remova a coliso. Faa o mesmo para a moeda.

Criando a porta
Vamos agora criar a porta para nossa chave, para isso crie um novo Actor com o
nome A_Porta herdando de A_ObjetoBase e siga os passos:
Adicione uma StaticMesh para o actor, defina o mesh SM_Door para este
componente reposicione e escale o Detector para quando o Jogador chegar aquele
local a porta verifique se ele tem a chave certa.

Sobre escreva o CustomEvent Jogador Detectado criando este evento na aba


EventGraph da mesma forma que fizemos com a chave e moeda.
Crie uma varivel pblica com o nome MinhaChave do tipo A_Chave, esta ser a
chave da porta e no fim tudo dever ficar da seguinte forma.

Agora posicone varias moedas na cena, uma porta e uma chave, estamoa usando
apenas uma chave mas voce podera usar quantas portas e chaves desejar.
Posicione uma chave na cena bem como vrias moedas espalhadas:

O elevador
Vendo a imagem acima chegamos a um ponto no cenrio que no conseguimos
chegar ao patamar de cima, para conseguirmos vamos construir um elevador, vamos
aos passos ento.
1.
2.
3.
4.

Crie um novo ator e de o nome de A_Elevador herdando A_ObjetoBase


Adicione um StaticMesh, e defina a mesh como 1M_Cube
Reposicione e redimensione o Detector
Realize a sobre escrita do CustomEvent Jogador Detectado

Controle de estados
Quando nosso player morrer devemos diferenciar se ele morreu na queda ou se
morreu pelo inimigo, mas como faramos isso?
Poderamos usar uma varivel do tipo integer e dizer que caso o valor seja 0 significa
que o player morre pelo inimigo, e caso seja 1 ele morreu pela queda, porm essa
soluo no interessante pois pode gerar dvidas e muitos problemas conforme o
projeto comece a ficar maior, imagine 100 estados diferentes sendo definido dessa
forma entre diversas classes!
Para isso temos o Enum, nele podemos organizar nossos estados de forma mais
clara e organizada.

Com o Enum criado defina seu nome para E_Estados e abra este arquivo criando
trs estados.
Vivo
o Estado em que o player ainda est vivo
MortoPeloInimigo
o Estado informa que o player morre pelo inimigo
MortoPorAreaPerigosa
o Estado informa que o player morreu por entrar em uma rea de
perigo, podemos pensar como sendo Lava, rea radioativa ...

Programao no Player (Jogador)


At o momento construmos a cena e os itens que usaremos no jogo, mas nada de
programao... bem isso acaba por aqui vamos programar!
Vamos iniciar a programao criando o inventario do Jogador, onde guardaremos
todas as chaves e o nmero de moedas que pegamos durante a fase.
Crie uma varivel do tipo A_Chave chamada Chaves e marque-a como lista de
A_Chave clicando no quadriculado ao lado do tipo de varivel.
Crie tambm uma varivel do tipo integer chamada Moedas, a usaremos para contar
quantas moedas pegamos na cena.
Precisaremos ainda do estado do player ento crie uma varivel do tipo E_Estados e
chame de EstadoAtual.
E por fim teremos um sistema de Checkpoint logo devemos guardar a posio em
que ele se encontra para isso vamos criar uma varivel do tipo Vector e chamada
de CheckPointEncontrado.

Sistema Chave Porta / Pontuao II


Vamos voltar nossa ateno agora para o cenrio, nele deixamos j configurado uma
porta e uma chave, assim como vrias moedas e o elevador pelo uso de herana agora
s precisamos definir para cada ator o que seu evento Jogador Detectado deve fazer.

Abra o arquivo A_Moeda encontre o CustomEvent Jogador Detectado que criamos e


altere sua lgica.
Pegue a varivel moedas do nosso jogador e realize o incremento e imprima o novo
valor na tela depois destrua o objeto.

Chaves
Abra o arquivo A_Chave encontre o CustomEvent Jogador Detectado que criamos e
altere sua lgica.
Pegue a varivel Chaves que uma lista e adicione a prpria moeda a essa lista
depois mova ela para fora da vista do jogador.

Portas
Abra o arquivo A_Porta encontre o BeginOverlap que criamos e altere sua lgica.
No evento Jogador detectado procure MinhaChave dentro da varivel Chaves do
caso exista iremos abria a porta.
Adicione uma TimeLine que ir variar de 0 a 90 o nome da varivel de sada ser
AnguloAtual, ela deve ter 2 segundos de durao, clique com o shift pressionadora

criar dois pontos, clique no primeiro ponto de defina o tempo e valor para zero,
clique no segundo ponto e defina seu tempo para 2 e seu valor para 90.

Defina a rotao da porta para ser igual ao valor de sada da TimeLine um Doonce
para que seja feita apenas uma vez a ao tudo dever ficar como na imagem.

Temos ainda que definir qual chave pertence a nossa porta, para que ela seja aberta
caso o jogador tenha a chave.
Selecione a porta que est na cena, v para o painel de detalhes e no campo default
voc ver a varivel MinhaChave, clique no conta gotas e depois clique na chave que
est na cena assim a chave ser atribuda quele objeto.

Elevador
Ainda no conseguimos chegar at a porta pois o player na pula to alto, por isso
criamos o elevador e iremos programa-lo agora.
Para o evento Jogador Detectado crie uma nova Timeline chamada Subir, que ter
durao de dois segundos, crie uma varivel com nome Altitude e dois pontos, o
primeiro em time e valor igual a zero e o segundo time igual a 2 e valor igual a 7,
para mim esses valores foram suficientes para que o elevador subisse at o topo
adapte para o seu projeto.

Agora para o elevador descer use o evento Jogador Perdido, duplique a TimeLine e
multiplique a altitude por menos um, assim o elevador comeara a descer logo que
o player sair dele.

Checkpoint
Vamos brincar com o Checkpoint, para isso vamos usar a mesma lgica que usamos
para a chave, voc se lembra como fizemos?
Crie um novo ator que herde de A_ObjetoBase, defina o cone
Icone_CheckPoint_Sprite que criamos a partir do Icone_CheckPoint como fizemos
coma moeda e chave lembre-se de remover a coliso do cone, realize a sobre escrita
do evento Jogador Detectado, quando este evento ocorrer pegue a posio do
checkpoint e defina para a varivel CheckPointEncontrado do jogador.

Alm disso devemos definir a posio inicial do jogador para a varivel


CheckPointEncontrado pois caso ele morra sem encontrar um checkpoint esse
ser colocado na posio (0,0,0), para isso vamos para o Jogador e no evento
Beginplayer definimos o valor da varivel como sendo a posio que o player
iniciou.

Posicione alguns checkpoints pela cena.

Zona da morte
Para usarmos o nosso sistema de checkpoint temos que morrer primeiro n? Ento
crie um novo ator chamado A_AreaPerigosa herdando de A_ObjetoBase assim
como no checkpoint adicione um PaperSprite e coloque o cone
Icone_lancas_Sprite remova a coliso do Sprite.

E vamos repetir o mesmo processo do checkpoint porem agora iremos trocar o


estado do player para MortoPorAreaPerigosa e aps um delay de 2 segundos
vamos chamar o CustomEvent Jogador Morreu que criaremos no Jogador logo
abaixo.

No Blueprint do Jogador crie este CustomEvent que chamamos a varivel de entrada


do tipo E_Estados, troque o estado a atual para o estado que foi passado no
parmetro e depois de 2 segundos reposicione o player para a posio do checkpoint
e traga o de volta a vida.

Assim j mudamos o estado do jogador para morto e podemos trocar a animao


dele por uma animao de morte.
Adicione este ator a cena para que o player possa comear a morrer, vejamos como
ficou agora.

O inimigo (IA)
Todo o jogo j est funcionando, pegamos moedas, conseguimos abrir portas
morrermos em reas perigosas temos o nosso inventario.
Vamos ento comear a trabalhar nossa inteligncia artificial, ela ir perseguir o
nosso jogador e mat-lo caso o toque.
Primeiramente vamos repetir o passo da apostila anterior inserindo na cena um
Nav Mesh Bounds Volume na tab Modes.

Redimensione o volume para que ocupe toda a rea do mapa.

Voc se lembra que onde fica verde, para ver o verde clique em Show e Navigation,
onde o inimigo poder andar n? Ento j percebeu que nos blocos que o jogador
est no existe uma rea verde n? Isso acontece, pois, o NavMesh precisa de uma
certa largura para ser criado na mesh, e para resolver este problema s precisamos
aumentar a largura dos blocos.

O terreno para o inimigo est pronto, mas ainda no temos o inimigo, crie ento um
novo BluePrint Character e de o nome de CH_Inimigo e configure seu SkeletalMesh
e sua AniamationBlueprint igual ao do Jogador.

Crie outro Blueprint do tipo AIcontroller, voc pode encontra-lo em All Classes no
popup de novo Blueprint, chamado AIC_Inimigo este ser a inteligncia artificial do
nosso inimigo. Defina-o como controlador padro do CH_Inimigo.

Neste controlador faa com que o inimigo logo que entrar em cena, guarde a posio
dele em uma varivel do tipo Vector chamada Posio inicial

E a cada evento Tick ele veja se tem algum player na cena, caso tenha e esteja vivo
persiga-o, caso no esteja vivo ele volta para a posio inicial dele.

Mas ainda temos de fazer a mudana de estado do player quando ele for tocado pelo
inimigo, para isso crie um SphereCollider no CH_Inimigo faa o Cast para o jogador
e ento mude o estado chamando a funo Jogador Morreu e passando como
parmetro MortoPeloInimigo.

Prontinho! Nosso inimigo j est fazendo tudo que tem de fazer porem se voc
comear a subir nos blocos e elevador e outros nveis diferentes do cho poder
perceber que ele no soube nveis algum, essa uma questo que deixamos na
apostila anterior e que agora iremos resolver.

Subindo nveis!
Nosso inimigo segue o player apenas no NavMesh verde que gerado, quando existe
uma descontinuidade desse NavMesh o inimigo no com segue ir at l, na verdade
ele nem sabe que pode existir uma NavMesh em outro lugar que no seja a dele.
Para avisarmos a ele que existe outros lugares que ele pode andar, precisamos usar
o Nav Link Proxy, ele existira dois PointLinks que iremos posicionar na cena
informando de onde para onde o inimigo pode ir.

Porem precisamos posicionar os PointLinks de forma que surja uma linha verde
ligando os dois, abaixo ter as imagens mostrando a forma errada e a correta.

Corrigindo a posio:

Posicione outros desses nas reas que precisam ser escaladas pelo inimigo da
seguinte forma.

De o play no game e veja que o inimigo agora sabe que naqueles pontos ele poderia
ir para o andar de cima, mas no consegue ir pois os PointLinks apenas avisam locais
para o inimigo.
Vamos ento criar um novo actor chamado A_Pular, mas dessa vez no iremos
herdar de A_ObjetoBase, que ir avisar que ele deve fazer algo quando chegar ali
dever pular conseguindo assim subir no bloco, neste ponto voc pode usar
animaes para fazer com que ele escale a parede, ou faze-lo teleransortar isso vai
de sua deciso.

Posicione ento este novo ator prximo aos PointLinks para que quando a IA chegue
naquele local ela pule.

Com isso nosso inimigo consegue subir e descer nos nveis da fase, experimente
fazer alguns destes testes e ajuste as suas necessidades.

Inteligncia Artificial III


Confronto I

Inteligncia Artificial III


Projeto Confronto I
Nesta apostila estaremos trabalhando com conceitos de confronto entre player e a
IA, teremos de lidar com comunicao entre os inimigos ou entidades bem como o
prprio player.
O Curso consiste em trs apostilas sendo que est conter os tpicos medianos sobre
inteligncia artificial em jogos digitais.

Template do Projeto
Precisaremos de um template para iniciarmos nossos estudos. Optei por utilizarmos
template em Third person, pois no precisaremos nos preocupar com a
implementao bsica de controle do jogador que j fora visto, bem como a
construo de um mapa para possveis testes.

Lista de Passos:

Executar o Laucher
Criar um projeto em Blueprint
Definir as configuraes iniciais

Primeiramente execute o Launcher da Epic Games e em seguida clique em


Inicializar.

Em seguida surgir uma nova janela. Nela iremos definir as configuraes bsicas
do nosso projeto.
Escolhemos Novo projeto e escolhemos faz-lo em Blueprint, definiremos que o
template a ser usado ser o de Third person e ento escolhemos o local onde ser
salvo e seu respectivo nome.

Configurao inicial do projeto


Em seguida cria uma pasta Chamada IA3 e mova para dentro dela os Character e
Mapa padro do projeto.

Vamos criar agora nossa ia, a ideia aqui replicar de forma simples uma ia no estilo
circular, similar ao sistema de ao usado em Assassins Creed e Batman: Arkham.
Ainda usaremos o sistema de blueprint para vermos como pensar, pois, muitas das
implementaes ficam implcitas quando usamos os sistemas de Behavior Tree
Blackboard.

Crie ento o Character para a IA e IAController nomeando-os para CH_IA3 e IAC_IA3,


informe a Mesh, Animation Blueprint bem como o IAController para o CH_IA3.

Vamos ento definir o navmesh e em seguida posicionar quatro de nossos inimigos


em cena.

Abra o ThirdPersonCharacter e altere o CameraBoom setando o valor de Do


Collision Test para false, para que assim a cmera no aproxime do player caso
algo fique entre ela e o player. Caso queira afastar a cmera um pouco para que
tenhamos uma visualizao mais abrangente.

Game design
Como a inteligncia artificial do inimigo ser semelhante ao Batman: Arkham nosso
inimigo tentar que obedecer alguns protocolos ou regras para que o gameplay se
desenrole, isso definido no design da inteligncia artificial.
Neste jogo o player no ir poder atacar os inimigos, ir apenas andar e se defender
seguindo a sabedoria dos antigos mestres de kung fu.
Vamos ento criar o IA Design:

O inimigo ter os seguintes estados


o Patrol
Estado em que ainda no encontrou o jogador
o Following
Se posicionando
o OnGuard
Esperando para poder atacar
o Fighting
Est lutando com o jogador

O inimigo quando avistar o player ira se posicionar para ataque e ira persegui
lo
Quando perto do player ele devera circundar o jogador
O ataque ser realizado em turnos, ou seja, quando um inimigo estiver
atacando todos os outros no estaro.
O turno s acaba quando o player acaba de receber um ataque ou quando ele
acabar de bloquear.
A escolha de quem ir atacar randmica.

Imagine-se sendo o inimigo que vamos programar, quais seriam suas primeiras
aes com relao ao que foi descrito acima? Voc sabe que tem de ir a o player,
mas onde at o player ou quando? Pense nisso e liste o passo a passo, quando mais
detalhado melhor.
Abaixo uma possvel lista de aes:
1.
2.
3.
4.
5.
6.

Qual estado eu incio?


Existe algum player prximo a mim?
Onde est o player onde irei me posicionar?
A que distncia do player devo ficar em guarda? Ou sair da guarda?
Como irei me afastar do player caso ele se aproxime de mim?
Quando que eu posso atacar?

Agora que j definimos como o inimigo ir agir podemos iniciar a programao


respondendo as questes da lista acima.

Qual estado eu incio


Como no mundo real ningum fica lutando sozinho, o mais lgico seria esperar um
inimigo surgir para ento ns preparamos e depois ver se precisamos lutar. Ento
vamos fazer com que a nossa uma se inicie em Patrol.
Crie um enum chamado E_IAState e defina os estados listados no ia design: Patrol,
Following,OnGuard, Fighting.

Logo em seguida crie uma varivel no IAC_IA3 chamada state do tipo E_IAState e
defina seu valor default para Patrol.

Resumo de funes e variveis


Como ira existir muita comunicao entre os blueprints, achamos que seria melhor
listar aqui todas as funes e variveis que devem ser criadas, mas a frente
explicaremos cada uma delas.
1. ThirdPersonCharacter
o Variveis Globais
MaxAround
Varivel do tipo integer responsvel por definir
quantos inimigos podem ficar a uma certa distncia.
CountAround
Varivel do tipo integer responsvel por informar
quantos inimigos esto me cercando.
MinRadius
Varivel do tipo integer responsvel por determinar a
distncia mnima que os inimigos devem ficar do
player.
PrepareForDefence
Varivel do tipo boolean responsvel por informar que
o jogador est sendo atacado.
InFight
Varivel do tipo boolean responsvel por informar que
o player e o inimigo esto lutando.
InDamage
Varivel do tipo boolean responsvel por informar que
o player est sofrendo um dano do inimigo por no ter
contra-atacado atempo.
o Funes
GetPoint
Retorna um ponto ao redor do player
GetRaioAngle
Responsvel por determinar a distncia e a posio em
que o inimigo ira se posicionar.
GetOffset
Pega o offset da posio retornada pelo GetRaioAngle.
AlertPrepareForDefence
Realiza a sinalizao visual e lgica de que o player est
para ser atacado.
2. IAC_IA3
o Variveis
state
Varivel do tipo enum E_IAState, indicar em que
estado nosso inimigo se encontra.
BestOffSetPoint
Varivel do tipo vector2d que ir guardar o offset para
somarmos a posio atual do player e sempre termos
um posicionamento certo.
AreaOfAttack

Varivel do tipo booleana que informar se o inimigo


est prximo o suficiente para atacar.

Funes
ToFollowing
Altera o estado para perseguio
ToOnGuard
Altera o estado para modo de batalha
GetPointToMove
Retorna um vector3d baseado na posio atual do
player e no offset.
LookToPlayer
Faz com que o inimigo olhe para o player
PositionInCircle
Determina uma posio ao redor do player
3. CH_IA3
o Funes
ToOnGuard
ToFollowing
EnterAreaOfAttack
o

Existe algum player prximo de mim?


Para respondermos essa pergunta podemos criar uma Sphere Collision de raio 400
no ThirdPersonCharacter e ative o evento BeginOverlap e EndOverlap para
verificar se o um inimigo no caso CH_IA3 est prximo.
Coloque tambm um outra Sphere Collision de raio 250, esta iremos usar mais tarde.

Quando o evento for acionado faremos o cast para CH_IA3 verificando assim se
realmente um inimigo logo em seguida iremos chamar a funo ToOnGuard e
ToFollowing, que j deve ser criada no CH_IA3 e chamada respectivamente em
BeginOverlap e EndOverlap do player para o trigger.

Crie as mesmas funes tambm no IAC_IA3.

Para a funo ToOnGuard vamos pegar a referncia do IAController e chamar a


funo ToOnGuard do controlador.

Agora vamos comear a controlar o estado do nosso inimigo por meio de enum. Crie
um novo enum chamado E_IAState e no IAC_IA3 crie uma varivel deste tipo
E_IAState chamada state.

Ainda no IAC_IA3 vamos chamar o evento Tick e executaremos um switch para a


varivel state assim conseguiremos controlar as aes dependendo de qual estado
estivermos.

Perceba agora que para cada estado podemos tomar um caminho diferente.
Agora s falta alterar os estados do inimigo, fazemos isso pela funes
ToOnGuard e ToFollowing que so chamadas quando o player detecta o
inimigo e quando ele o perde de vista, quando detectado vamos fazer com que o

inimigo

se

posicione

em

guarda.

e quando sair da rea do trigger ele ficar no estado de perseguio.

Onde est o player onde irei me posicionar?


Agora que sabemos que existe um player, o prximo passo saber nos posicionar,
vamos comear pelo estado Following.
Para ele s precisaremos pegar a referncia do player e chamar a funo Move to
Actor da seguinte forma.

Agora vamos brincar com o Onguard, nele vamos fazer o inimigo olhar para o player,
se posicionar e tentar atac-lo.
Crie uma funo chamada PositionInCircle ela devera atualizar o
BestOffSetPoint, vamos ento realizar o cast do player e pedir para ele o offset, pois
em nossa lgica deixaremos apenas 4 inimigos a um raio de 200 cm e os prximos 4
inimigos com o dobro do raio e assim por diante.
Teremos ainda de encontrar uma posio ao redor do player para que nosso inimigo
comea a cercar o jogador, est matemtica de posicionamento a principal funo
deste game play, pois nele de toda a inteligncia estar, quando mais casos serem
tratados melhor ser nosso inimigo.

Agora vamos para o ThirdPersonCharacter, pois ele que saber quantos inimigos
esto te perseguindo.
Crie a funo GetOffset sela ira retornar um offset, mas para isso precisamos
escolher uma posio ao redor do player certo? E ainda a cada 4 inimigos vamos
dobrar a distncia que ficaram do player.

Aqui criaremos uma funo chamada GetRaioAngle que ser responsvel por
calcular a distncia que os inimigos ficaram do player dependendo de quantos
inimigos j esto perseguindo, e ainda o ngulo ao redor do player de 0 a 360
estamos usando um valor integer para evitar valores como 12.7678.

Nele dividimos o nmero de inimigos redor pelo nmero mximo permitido, em


nosso caso ser 4, mas voc pode escolher outros valores, a distncia mnima do
inimigo ao player ser de 200 cm.

Com isso temos o ngulo ao redor do player e uma distncia dele, mas ainda
precisamos calcular com essas informaes o ponto ao redor do player para ento
calcular o offset, para isso criamos a funo GetPoint
Primeiro calculamos um vetor direo normalizado pois este ser nosso ponto
angulo zero.

Logo em seguida multiplicamos este vetor pela distncia passada por parmetro que
encontramos no passo anterior encontrando assim um ponto com ngulo 0 redores
do player, porm queremos um ponto com o ngulo do parmetro ento realizamos
a rotao deste vetor com a funo Rotate Vector Around Axis.

Com isso voltamos para a funo GetOffset com o ponto correto, calculamos offset
pela diferena deste ponto com a posio do player e atualizamos a varivel
BestOffSetPoint da funo PositionInCircle la do nosso IAC_IA3 ufa sobrevivemos.
Agora a parte fcil s colocarmos isso para funcionar no estado de Onguard, mas
antes vamos criar a fundao que ir fazer com que fiquemos olhando para o player
quando estivermos em guarda, chamaremos ela de LookToPlayer .
Nele teremos de pegar a posio de inimigo e do player para calcularmos a rotao
utilizando a funo Find Look At Rotation e vamos corrigir para que quando o
player pular os inimigos no girem em torno de y pois ficaria bem estranho.

Agora s precisamos calcular a posio que devemos seguir baseado no offset que
adquirimos quando entramos em guarda e achar o ponto que temos de seguir ao
redor do player, fazemos isso com a funo GetPointToMove que definimos como
PURA.

Agora para fechar com chave de ouro usamos tudo isso para realizar o MoveTo:

A que distncia do player devo ficar em guarda? Ou sair da


guarda?
Neste ponto temos ento uma posio para o inimigo seguir e ficar sempre ao redor
do player certo? Bem ... com esse ponto a nossa inimiga ir se afastar quando o
player se aproximar dele, e ira perseguir quando o player se afastar.
Se percebermos la no incio fizemos com que o ocorra o EndOverlap o estado mude
para perseguio, portanto caso o jogador saia correndo para longe do inimigo esta
ira sair do modo guarda e entrar em modo perseguio com isso controlamos como
ele ir agir mudando apenas o estado dele legal n :)

Quando que eu posso atacar?


Agora vamos atacar a ltima pergunta :P, lembra aquela outra Sphere de raio 200
com que criamos ? Ento agora que iremos us-la.
Ela servir para determinar se o inimigo est prximo o suficiente para atacar ou
no o nosso jogador.
Primeiramente ative o BeginOverLap e EndOverlap para chamarmos a funo
EnterAreaOfAttack do CH_IA3.

em seguida implemente essa funo para que altere a varivel AreaOfAttack no


controlador da ia da seguinte forma.

Faa a mesma coisa para o EndOverlap, porm definindo a varivel para false.

Agora nossa ia sabe se pode ou no atacar o player.


Vamos agora criar o input para que o player consiga se defender do ataque do
inimigo, indo em Edit->Project Setting->Input onde iremos definir um novo action
mapping chamado Defence.

Logo em seguida vamos definir as mudanas de estado das variveis quando est
recebendo dano usando um custom event.
As mudanas sero feitas com o trmino das animaes por isso estamos usando os
delay pois j iremos trabalhamos com elas.

Vamos ver agora a lgica da IA para o ataque pois ela j sabe que pode atacar.
Para ela atacar vamos fazer com que no estado de OnGuard a cada um certo tempo
a ia tente atacar o player somente se estiver na rea de ataque.

Caso ela seja apta a atacar vamos chamar o nosso custom evento TryAttack que
ir validar mais algumas condies de ataque que so:

No posso atacar se PrepareForDefence for True pois algum j est


atacando o jogador.
Tambm no posso InFight for true pois ele est lutando com algum.
E muito menos posso atacar caso algum esteja batendo dele pois InDamage
essa true nessa hora.

Caso tudo esteja liberado posso atacar e, portanto, irei avisar o player que eu estou
atacando e irei mudar para o estado Fighting

Vamos agora ver como trabalhar com o estado de luta, nele vamos fazer com que o
inimigo ande at prximo do player no caso 2 segundos, que tambm o tempo que
ele ter para se defender.
Caso o jogador no clique com o boto direito do mouse neste tempo a varivel
InFight estar como false ento poderemos aplicar dano ao player.

Neste momento iremos executar a animao e como feedback mudamos de estado


quando ela terminasse, mas como isso ser feito logo mais vamos usar um delay para
simular o tempo da animao e recolocar o estado do inimigo para OnGuard dando
assim chance de outro inimigo atacar. Temos de fazer essa mudana de estados
tambm quando o player conseguir se defender bem como resetar as variveis de
controle.

A funo damage que chamamos aqui na verdade o Custom event e que fizemos
logo acima.
Nossa configurao final ficou ento desta forma, com poucos arquivos, e uma lgica
simples conseguimos fazer um sistema bem interessante em que voc pode
melhorar as verificaes, dando mais liberdades para a inteligncia artificial e
deixando assim seu jogo mais dinmico e divertido.

Experimente agora dar o play no jogo e ver ele funcionando com as mensagens.

Introduo a interface Grfica


Wedgets

Introduo a Interface Grfica


Widgets
Neste captulo veremos como configurar a interface grfica de nossos projetos
atravs da criao e edio do Widget Blueprint.

Configuraes Iniciais
Para este exemplo poderemos ter como base um dos projetos j iniciados
anteriormente.

GUI
A Interface grfica de um game tem a misso de comunicar ao jogador sobre sua
estrutura, atravs de menus interativos, e como essa mesma estrutura pode ser
explorada, conquistando achievements, abrindo pontos para os prximos
upgrades, expandindo os itens do inventrio e assim por diante. muito comum ao
vermos informaes sobre a parte artstica de produo de games ouvirmos o
termo GUI, trata-se da abreviao de Graphical User Interface.
A Engine Unreal 4 possui uma ferramenta exclusiva para a criao e dio de GUI,
chama-se Widget Blueprint.

Para criar uma nova Widget, clique com o boto direito do mouse em algum espao
vazio de uma das pastas no Content Browser e siga o caminho indicado na imagem
a cima. Para o nosso exemplo iremos nomear a Widget como GUI01.
A baixo vemos Widget editor, nele ns temos 2 abas principais para trabalhar:
Design e Graph, ambas podem ser acessadas na parte superior direita do editor.

Vamos voltar a aba Design. Esse espao retangular no centro da tela nos indica nossa
rea de canvas, do lado esquerdo ns temos a aba Palette, esta possui diversos
elementos que podemos arrastar para a nossa rea de canvas. Entre os elementos
dentro de Palette ns temos: bordas, botes, imagens, barras progressivas, textos...
etc.

Vamos arrastar um boto para o canvas.

Ao faz-lo notamos que o painel Detail agora possui informaes da propriedade


deste elemento grfico.
Vamos fazer um pequeno teste para habilitar alguns elementos grficos em nosso
gameplay. Aumente um pouco o tamanho do boto que est no canvas e ponha sobre
o mesmo um texto HUD Funcionando.

V agora ao Event Graph do Open Level Blueprint, no Level Editor, e l chame o n


Create Widget.

Nele iremos selecionar o Widget que acabamos de criar.

O n Add To Viewport far com que a interface seja reproduzida enquanto


jogamos.

timo, o nosso Widget est funcionando perfeitamente, porm j que definimos a


programao do mesmo no Open Level Blueprint, ele funcionar apenas nessa fase,
mas e se o nosso projeto possuir vrias fases? Para que no precisemos reproduzir
os cdigos em todos os Open Level Blueprints de todas as fases devemos criar agora
uma nova classe Blueprint denominada HUD.

Iremos denomina-la como HUD_BP. Clique duas vezes no cone da


nova HUD.

Reproduza o mesmo cdigo que havia sido feito anteriormente no Open Level
Blueprint, tenha certeza que este ltimo no possua mais o mesmo cdigo, deixando
apenas no HUD_BP. Pronto, isso garantir que o Widget seja lido pelo HUD, porm

para que ela funcione em todos os levels devemos acessar nosso GameMode e l
dizermos que a HUD do game ser nossa HUD_BP.
Abra agora Project Sethings e acesse HUD Class.

Selecione ai nossa HUD_BP.


Dessa maneira a HUD funcionar em todas as fases de nosso game, pois adicionando
ao nosso Game Mode, definimos como regra de todas as fases que usarem esse
GameMode.

Sistema de Health
Vamos agora demonstrar como a programao do Widget, criando uma barra de
vida e um sistema de dano.
Continuando de onde paramos no exemplo anterior, entre na classe blueprint do
Player, no Event Graph, crie 1 variveis Float, chamada de Current Health, depois
monte o esquema a seguir.

Neste esquema dizemos que qualquer coisa que cause dano no nosso player
reduzir o valor da varivel Current Health. Agora vamos ao nosso Widget,
denominado GUI01.

Arraste uma Progressive Bar para o canvas, clique no smbolo que parece uma rosa
e com ele selecionado v no painel Detail e escolha o modelo superior central em
Anchors:

Para que nosso Health fique no centro exato, va no eixo X de Aligment e ponha 0.5.

Agora com a barra selecionada clique em Binding no painel Detail isso criar uma
funo para interagirmos com Percent.

Dentro do novo Binding criado monte o seguinte esquema:

O cdigo ai incerido estabelece a condio da propriedade Percent ser alterada,


ela que far a barra descer ou subir. Estamos determinando que o que retornar o
velor de Percent ser a varivel Current Health (criada no player) dividida por 100
(para encontrar o n Float / Float na busca por ns digite apenas a barra /).
Feito isso agora vamos para a View Port criar um agente que tire dano de nosso
player. No painel Modes aba Volumes h um desses que se chama Pain Causing
Volume, arraste-o para o level.

Podemos configurar esse volume diretamente no painel Detail para que tire dano de
nosso player. Na aba Pain Causing j 2 opes que usaremos:

Damage Per Sec: essa determina quanto o Health de nosso player Descer a
cada intervalo de tempo definido por Pain Interval.
Pain Interval: determina o intervalo de tempo que o dano ocorrer, por
exemplo, caso escolhamos aqui 1.0 e em Damage Per Sec 0.3, isso significa
que a cada 1 segundo a vida descer 3 pontos, dentro da rea do Volume.

Este volume aparecer invisvel no game quando dermos play, por isso para
identifica-lo vamos colocar a partcula de fogo no seu centro.

Ao entrarmos no modo game e entrarmos na rea correspondente ao Volume


notamos nosso Health descendo.

Quando samos da rea a barra permanece baixa. Vamos criar agora uma classe
blueprint que usaremos como um Kit Mdico, ou algo do tipo, para aumentar
novamente nosso Life.

Criando Regenerador de Health


Ponha um Mesh da aba Basics em nosso Level para ser o nosso regenerador de vida.
Atribua a ele um material do seu agrado.

Transforme o retngulo em uma classe Blueprint e v at sua viewport. Adicione um


Box Collision em sua composio clicando em Add Components.

V agora para o seu Event Graph e com o Box selecionado chame o n


OnCompenteBeginOverlap.

Depois chame o Cast to correspondente ao seu player traga a varivel Current


Health tanto Get como Set. Coloque condio de Current Health Set o n float + float
e monte o esquema da seguinte maneira.

Ao colidir com o Box Collider Current Health receber 10 pontos de Life e este objeto
ser destrudo.
Espalhe algumas Classes Life pela fase.

Ao darmos play e ficarmos na rea do fogo notamos nossa vida descendo, porm ao
sairmos e encontrarmos um dos retngulos, quando encostamos nos mesmos nossa
barra de vida sobe um pouco e o retngulo desaparece.

E assim conclumos o nosso sistema de perda e recuperao de Health.

Concluso
E aqui chegamos ao fim... esperamos que voc tenha aprendido muito conosco.
Quando criamos a apostila pensamos em uma forma de passar tanto conhecimentos
tcnico da ferramenta, como a resoluo de problemas e otimizaes no projeto
mostrando formas de fazer e o porqu de fazer deste ou daquele jeito. Um abrao e
nos vemos na indstria de jogos digitais!

Referncia Bibliogrfica

Unreal Engine 4 Documentation https://docs.unrealengine.com/latest/INT/

Você também pode gostar