Controlar um personagem na UE 4 Disciplina: Tecnologia e Desenvolvimento de Jogos Digitais Professor: Rafael Siqueira Telles Vieira THIS WORK IS LICENSED UNDER THE CREATIVE COMMONS ATTRIBUTION-SHAREALIKE 4.0 INTERNATIONAL LICENSE. TO VIEW A COPY OF THIS LICENSE, VISIT HTTP://CREATIVECOMMONS.ORG/LICENSES/BY-SA/4.0/ OR SEND A LETTER TO CREATIVE COMMONS, PO BOX 1866, MOUNTAIN VIEW, CA 94042, USA. 1. Crie um projeto Vazio na UE4 (Clique em Create Project), e adicione o pacote Infinity Blade: Adversaries, conforme já vimos em sala de aula. Caso já tenho feito um personagem no Blender com as animações de Andar e Correr, ele também pode ser usado no lugar do pacote sugerido. 2. Clique então em Settings Project Settings acima do Viewport.
3. Procure por Input dentro da Opção Engine, e adicione dois mapeamentos de eixo (Axis Mappings), moverdireita e moverfrente conforme abaixo: Obs: As teclas W e S serão usadas para mover o personagem para frente e para trás, enquanto que A e D serão usadas para mover o personagem para esquerda e direita. Repare que aqui também é possível definir comandos para uma gamepad USB caso tenha um, e outros controles. 4. Em seguida fecha a janela de configuração, e vamos criar um novo Blueprint, em Content Browser clique com o botão direito para criar um novo BluePrint do tipo Character, que é um Pawn que pode ser controlado pelo jogador e ser animado.
5. Nomeie o arquivo como BP_MeuPersonagem e salve tudo. 6. Clique duas vezes sobre o nosso Blueprint para abri-lo e em viewport vamos adicionar nosso personagem. Clique sobre Mesh na aba de Componentes. 7. Em seguida, mo canto direito de nosso Viewport deve ter aparecido agora a opção Malha. E é exatamente nela que vamos escolher o nosso personagem, escolha o seu personagem feito no Blender que deve ser importado para o projeto, ou escolha qualquer personagem do pacote Infinity Blade. No meu caso, escolhi o Forge King. Obs: Carregar o modelo e texturas pode demorar dependendo de sua máquina.
8. Lembre de Escalonar o seu personagem, e posicioná-lo de acordo de modo a estar olhando na direçao do Arrow Component. 8. Precisamos agora adiconar uma câmera ao nosso personagem, esta câmera irá persegui-lo para aonde quer que se mova. Dando zoom in ou zoom out se houver alguma barreira entre a câmera e o personagem. Isto é feito pelo component Spring Arm. Adicione a nossa lista de componentes:
9. Agora adicione uma câmera como filha deste Spring Arm (braço com mola) clique de novo em Add Component e escolha câmera, em seguida, clique sobre o objeto Câmera e o arraste para cima de Spring Arm, para torná-la filha. Seus componentes devem ficar assim: 10. Clique agora sobre a câmera e na nossa janela de Detalhes, procure pela janela Sockets. Precisamos ligar fisicamente a camera com a Spring Arm, clique na lupa e escolha Spring End Point. Obs: Se desejar posicione sua câmera a vontade, mais perto ou mais longe do personagem, rotacionada ou não. Isto irá determinada qual a visão que o jogador terá do versonagem. Lembre-se de usar as teclas F para focar em um componente e segurar ALT para poder rotacionar com o mouse em torno deles.
11. Vamos agora para o Event Graph, aqui precisamos adicionar o script para fazer com que nosso personagem se mova. Clique com o botão direito e adicione os eventos que criamos em project settings: moverfrente e moverdireita. 12. Agora precisamos captura a rotação da câmera, para saber aonde está sua frente e aonde está seu lado. Clique com o botão direito no Blueprint dentro do Event Graph e adicione a função: Get Control Rotation.
13. O problema é que esta rotação que pegamos possui três vetores que definem um espaço tridimensional, mas nós queremos apenas dois deles, o vetor para frente e o vetor para o lado, já que nosso personagem não está voando ou nadando. Para pegar apenas esses vetores clique no botão roxo em Return Value e Split Struct Pin. Obs: As funções que aparecem são referentes a rotação nos três eixos X, Y e Z. Como você já deve ter suposto precisamos apenas de movimentaçao em X e Y, ou seja, a rotação em torno de Z (Pense a respeito, Yaw é equivalente a girar sua cabeça para esquerda e para direita). 14. Adicione agora a função Make Rotator para criar uma matriz de rotação baseada no eixo Z. Conforme abaixo:
15. Em seguida vamos extrair os vetores da frente e da lateral da nossa câmera com as funçoes Get Right Vector e Get Forward Vector. 16. Agora para concluirmos, preciamos apenas adicionar o movimento do controle na direção respectiva que foi capturada, isto é feito com a funçao Add Movement Input. Ligue os vetores com World Direction, o Axis Value com Scale Value, clique em Compile e está pronto. Nosso personagem está pronto para se mover!! Feche o seu Blueprint e volte ao viewport normal do jogo. 17. Mas quando aperto start nada acontece? Ainda falta um último detalhe adicionar um modo de jogo (Game mode). O Game mode diz quem é o personagem principal, qual HUD será usado entre outras opções para criar um modo de jogo clique novamente no ícone settings em seguida World Settings.
18. Uma nova aba abre na UE 4 ao lado da janela Detalhes, procure por Game Mode em World Settings, devem estar tudo vazio. 19. Clique em + para adicionar um novo modo de jogo e salve-o como meujogo. E em default Pawn Classe escolha BP_MeuPersonagem que criamos anteriormente.
20. Abra agora o nosso BluePrint Game Mode e em Event Graph adicione o seguinte Script que passa o controle de câmera e do personagem ao nosso jogador. O BluePrint deve ter com Get Player Character, Get Player Controller, Cast to Character e Possess. Tudo o que esse blueprint faz é passar o controle do nosso personagem de animação para o controle do jogador. (ATENÇAO: DESATIVE CONTEXT SENSITIVE ao adicionar as funções para poder adicionar POSSESS). 21. Pronto Nosso personagem está no jogo e já pode se mover para qualquer lado que desejar! Só há um problema agora, nosso personagem se move, mas ainda não está usando as animações associadas! O que fazer? Precisamos criar um BluePrint para animação!
22. Como esta aula está extensa, iremos fazer apenas o mais simples. E abordaremos BluePrint de Animação mais a fundo na próxima aula. Para criar um blueprint de animação básico, clique com o botão direito em content Browser em Animation, escolhar Animation blueprint. 23. Ao criar o blueprint, escolha quem será o esqueleto que contém as animações. No caso deste tutorial, Forge King.
24. Seus assets no momento devem estar da seguinte maneira: 25. O Blueprint de animação é aberto em uma nova ferramenta da Unreal Engine, o Persona. No Persona temos acesso a um novo tipo de grafo, o animgraph (grafo de animação). 26. Puxe uma linha de Result e adicone uma nova máquina de estados (Add New State Machine).
27. Clique duas vezes sobre a State Machine. E adicione as duas animações do Forge King (clique e arraste) a ela renomeando-as como Idle e Walk. Ligue o entry Point com Idle (pois o personagem começa em Idle) e ligue Idle com Walk e Walk com Idle. 28. Para Concluir resta apenas definirmos a transiçao. Como o personagem passa do estado Idle para o Estado Walk, mas antes disso precisamos capturar uma variável de movimento do nosso personagem. Esta variável é o vetor Velocidade, o vetor velocidade informa quantas unidades por frame nosso boneco anda (cm/s). A classe personagem que criamos do blueprint já fornece esse valor, mas precisamos capturá-lo. Clique em Event Graph. 29. Puxe uma linha de Event Blueprint Update Animation e adicione a função Is Valid que possui correspondência com Try Get Pawn Owner. Isso garante que que nossa animação está com o controle do personagem (quando se dá play em uma animação, o Persona assume o comando).
30. Agora vamos dar setar a variável velocidade, mas para isso temos que obter o personagem do jogador com Get Player Character em seguida Get Velocity (que retorna o vetor de velocidade) e por fim Vector Length (que retorna o módulo do vetor). 31. Vamos agora, promover a saída de Vector Length para uma variável clique com o botão direito sobre Return Value e selecione Promote to Variable, em seguida renomeie-a para Velocidade. 32. Pronto, agora resta apenas definir as transições, retorne ao AnimGraph e para nossa Máquina de Estados (New State Machine). 33. Clique sobre as duas setas indo no sentido de Iddle Para Walk.
34. Puxe uma linha de Can Enter Transition e seleciona a operaçao maior que (float > float) e em seguida puxe a variável velocidade que acabamos de criar até o grafo e dê um Get nela para que seu grafo fique assim: 35. De forma Similar repita este processo para as duas setas que ligam o estado Walk ao estado Iddle e novamente dê um Get Velocidade, mas dessa vez a condição deve ser float <= float. Obs: Tudo o que fizemos é dizer que quando a velocidade é maior que 0, nosso personagem deve sair do estado Iddle e ir para o estado Walk. E quando a velocidade retornar a 0, o boneco deve sair do estado Walk e voltar ao estado Iddle (Isto é, se há velocidade coloque o boneco para caminhar, Walk, se não há velocidade, coloque-o no estado de folga, iddle).
35. Finalmente o último passo, para que nosso personagem siga o Blueprint de animação que acabamos de criar precisamos dizer para o BP_Personagem que ele deve usar o Blueprint MinhaAnimação. Para isso, feche o Persona, abra o BP_MeuPersonagem, Clique novamente em Mesh, na aba Animation, escolha Use Animation BluePrint em Animation Mode e em AnimClass escolha o Blueprint minhaanimaçao. 36. Dê Play e verifique seu personagem se move de acordo com o que foi implementado! Exercício: Tente adicionar animações para que seu personagem pule, ou outras animações dentro da nossa máquina de estado (todas as variáveis do personagem estão disponível para você pelo grafo que elaboramos, sua criatividade é seu limite).
Obs: Note que nosso personagem sempre anda para frente independente do lado que escolhemos e a velocidade do passo não parece estar de acordo com o seu movimento, na próxima aula veremos como corrigir isso através de BlendSpaces, não percam! Divirtam-se!