Computação Gráfica::Criando sua Primeira Aplicação no Unreal Engine em Linux

Esta página possui um breve Guia de Programação de uma Aplicação Simples no UE4 em Linux.
Possui também links para páginas que consideramos úteis.

Breve Guia para sua Primeira Aplicação em UE4

Invoque o Lançador do UE4 a partir da pasta do UE4 da seguinte forma:

$ ./Engine/Binaries/Linux/UE4Editor

Crie um novo Projeto

Ao abrir o gerenciador de projetos, selecione a aba C++ e um projeto do tipo Basic Code. Tome o cuidade de nas caixinhas de baixo, deixar selecionada a opção With Starter Content:

4.0.CreateC++Project

A opção With Starter Content vai povoar o seu mundo com alguns objetos padrão. No caso da planta de mundo  Basic Code, serão uma mesa, duas cadeiras, duas fontes de luz e uma estátua estranha sobre a mesa.

Chame o projeto de QuickStart (ou o que você desejar) e crie um novo projeto em Create Project.

O UE4 vai ficar um tempo gerando arquivos de inicialização e abrindo o editor.

Crie uma nova Classe C++ para o seu Ator

Em File no Menu Bar escolha New C++ Class:

AddCPPClass

O menu Choose Parent Class vai abrir. Como Actor é a classe mais básica em Unreal Engine , vamos usar Actor como classe-pai:

ChooseParentClass

O menu Name Your New Actor vai abrir. Vamos chamar a nova classe de “FloatingActor”. Em seguide clique em Create Class:

NameActorClass

Se você já quiser, pode clicar em Compile na Toolbar ao alto do editor e ver compilar.

CompileFromEditor

Escreva e Compile o seu Código C++

Agora vamos querer dar algum comportamento a este novo ator. Procure o projeto criado pelo UE4 e abra o projeto/workspace no editor de sua escolha. Unreal deve ter criado uma pasta de projetos em:

~/Documents/Unreal Projects

Lá deveria haver uma subpasta com o nome do seu projeto, em nosso caso QuickStart. Esta pasta vai estar povoada com tudo o que UE4 criou, inclusive a sua nova classe C++:

4.1.2.pasta

Os dois arquivos marcados na figura acima são os arquivos de projeto para QtCreator (.pro) e Codelite (.workspace). Abra um deles no IDE de sua escolha.

Modifique o Headerfile de seu Ator

Em FloatingActor.h,  inclua uma variável através da seguinte linha antes das chaves fechando a definição de classe:


float RunningTime;

Modifique o comportamento da Classe de seu Ator

No código do comportamento da classe FloatingActor.cpp, vamos adicionar código imediatamente antes do final do método AFloatingActor::Tick:

FVector NewLocation = GetActorLocation();
float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
NewLocation.Z += DeltaHeight * 20.0f;       //Scale our height by a factor of 20
RunningTime += DeltaTime;
SetActorLocation(NewLocation);

Este código vai fazer a posição do ator em Z variar em função do seno do tempo de relógio da simulação, na prática fazendo-o levitar para cima a para baixo, acelerando e desacelerando nos limites da amplitude do movimento.

QtCreator com o código do exemplo que acabamos de criar:

QTCreator

CodeLite com o código do exemplo que acabamos de criar:

codelite

Se você quiser, pode clicar novamente em Compile na Toolbar ao alto do editor e ver compilar.

CompileFromEditor

Adicione uma Geometria ao seu Ator

No Unreal Editor, vá para o Content Browser, na parte de baixo do editor e expanda o item de lista chamado “C++ Classes”. Ali você vai achar uma pasta”QuickStart” que contém a sua nova classe de Actor, o FloatingActor. Agora você pode criar uma instância de FloatingActor no seu mundo arrastando o ícone de esfera que o representa para dentro do Level Editor. A instância ficará selecionada tanto no Level Editor como no World Outliner, à direita (veja setas), onde será chamada de “FloatingActor1”. Seus componentes estarão visíveis no Details Panel, que você pode abrir à direita.

4.2.floating1

4.3.cone

Adicionando um Cone

Uma vez no Details Panel, à direita, selecione Add Component e, no pulldown-menu que vai abrir, selecione Cone:

4.2.1.AddStaticMesh

Isto vai adicionar uma geometria do tipo cone à sua instância de FloatingActor:

4.4.cone3

Modificando Atributos do Cone

Agora clique nele e arraste-o até ficar eum uma boa posição. Alternativamente, você pode setar a posição dele mexendo nas coordenadas de seu centro de referência diretamente no atributo Transform no Details Panel:

SetActorLocation

Teste sua Aplicação

Clique em Compile na Toolbar ao alto do editor e veja compilar.

CompileFromEditor

Clique em Play na Toolbar e veja o cone subri e descer! Quando cansar, clique em Pause.

4.5.play

Navegar pela Cena usando o Editor de Níveis do UE4

Navegar na cena com o Editor do UE4 não é tão intuitivo. Abaixo um resumo do que você pode fazer.

 
Controle Ação

Visão em Perspectiva

Mouse Esq.+ Arrastar Move a camera para frente e para trás e rotaciona o mundo para a direita e esquerda.
Mouse Dir. + Arrastar Rotaciona a camera da viewport.
Mouse Dir. + Esq. + Arrastar Move para cima e para baixo.

Visão Orthográfica (Topo, Frente, Lado)

Mouse Esq.+ Arrastar Cria uma caixa de seleção.
Mouse Dir. + Arrastar Faz panorâmica com a câmera.
Mouse Dir. + Esq. + Arrastar Faz zoom com a câmera.

Focar

F Foca a câmera no objeto selecionado.

Melhor forma de pular com a câmera de um objeto a outro.

Navegação Game-style

Em UE4 você pode também usar as teclas WASD. São habilitadas por default e você pode usaá-las sempre que estiver com o botão direito do mouse pressionado, significando que você vai continuar tendo de usar o botão direito do mouse para navegar dessa forma. Esses controles são espelhados nas teclas de seta para prover acesso alternativo e são válidos apenas em modo de perspectiva.

 
Controle Ação
W | Numpad8 | Up Move a camera para frente.
S | Numpad2 | Down Move a camera para trás.
A | Numpad4 | Left Move a camera para a esquerda.
D | Numpad6 | Right Move a camera para a direita.
E | Numpad9 | Page Up Move a camera para cima.
Q | Numpad7 | Page Dn Move a camera para baixo.
Z | Numpad1 Zoom out da camera (aumenta FOV).
C | Numpad3 Zoom in da camera (reduz FOV).

Quando estiver fazendo zoom segurnado o botão direito do mouse, o campo de visão (FOV) vai permanecercomo você setou até você soltar o botão do mouse.

Mais comandos de navegação você vai encontrar na página de manual do UE4 Viewport Controls. Dê uma olhada lá!

Invente e Crie!

Agora continue o seu progresso e faça o o tutorial: Level Designer Quick Start. Abaixo uma imagem do que você vai construir:

Finished

Veja também como importar objetos geométricos e arquitetônicos de outros programas como Blender.

Para saber mais sobre como iluminar os seus objetos e como iluminar globalmente a sua cena, definindo formas de tratamento da iluminação indireta, veja os seguintes tutoriais:

litRoom

  1. Iluminação de Objetos: https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/HowTo/Previewing_Applying/index.html
  2. Iluminação de Ambientes: https://docs.unrealengine.com/latest/INT/Engine/Rendering/LightingAndShadows/QuickStart/index.html
  3. https://docs.unrealengine.com/latest/INT/Engine/Rendering/LightingAndShadows/
  4. https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/MaterialProperties/LightingModels/index.html
  5. https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/HowTo/ShinyMaterials/index.html
  6. https://docs.unrealengine.com/latest/INT/Engine/Rendering/LightingAndShadows/Lightmass/

Além disso, com o que você já sabe, tente fazer o seguinte:

  • Adicione um Particle System Component ao seu FloatingActor. Existem alguns prontos no conteúdo padrão do seu projeto.
  • Use a macro de propriedade UProperty de  Unreal Engine expor uma variável contendo a magnitude do movimento do FloatingActor ao invés de usar uam constante. Dê uma olhada no tutorial em Variables, Timers, and Events.
  • Inclua os eixos X e Y no seu movimento periódico.
  • Multiplique  DeltaTime value por um valor entre 0.6 e 1.4, assim o FloatingActor parece se mover livremente.

Mais informação:

Código Final

FloatingActor.h

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
// Retirado de:
// https://docs.unrealengine.com/latest/INT/Programming/QuickStart/4/index.html

#pragma once

#include "GameFramework/Actor.h"
#include "FloatingActor.generated.h"

UCLASS()
class QUICKSTART_API AFloatingActor : public AActor
{
    GENERATED_BODY()

public: 
    // Sets default values for this actor's properties
    AFloatingActor();

    // Called when the game starts or when spawned
    virtual void BeginPlay() override;

    // Called every frame
    virtual void Tick( float DeltaSeconds ) override;

    float RunningTime;
};

FloatingActor.cpp

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
// Retirado de:
// https://docs.unrealengine.com/latest/INT/Programming/QuickStart/4/index.html 

#include "QuickStart.h"
#include "FloatingActor.h"

// Sets default values
AFloatingActor::AFloatingActor()
{
    // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
    PrimaryActorTick.bCanEverTick = true;

}

// Called when the game starts or when spawned
void AFloatingActor::BeginPlay()
{
    Super::BeginPlay();

}

// Called every frame
void AFloatingActor::Tick( float DeltaTime )
{
    Super::Tick( DeltaTime );

    FVector NewLocation = GetActorLocation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;       //Scale our height by a factor of 20
    RunningTime += DeltaTime;
    SetActorLocation(NewLocation);
}

Usando Outros Templates

Unreal vem com uma série de templates padrão para diferentes tipos de jogos. Eles vão aparecer na aba New Project do Launcher:

Unreal-4

Ne exemplo acima selecionamos o template Vexicle para jogos simples de perseguição e direção. Carregue-o e você verá a criação de um ambiente de jogo com um carro padrão e a câmera situada na posição acima do carro:

Unreal-vexicle1

Espere todos so shaders terem sido compilados (aparecerá na janela de comando de onde você invocou o UE4) e depois clique Play:

Unreal-vehicle2

Você verá um ambiente de direção onde você poderá guiar o carro usando as teclas padrão W-S-A-Z e outras próximas para troca de marcha, etc.

Salve este jogo e saia. Ao entrar novamente, se houverem projetos salvos, o Unreal Launcher abre na aba Projects, mostrando quais projetos estão salvos em seu computador:

Unreal-3

Onde eu acho mais conteúdo?

O site da Unreal possui muitos exemplos: https://docs.unrealengine.com/en-us/Resources/ContentExamples

Links Úteis

Editores, Ferramentas e Ambientes

Carga de Objetos 3D de outros editores em UE4

Outras Fontes para este Tutorial

Sobre o Autor

possui graduação em Ciências da Computação pela Universidade Federal de Santa Catarina (1989) e Doutorado Acadêmico (Dr. rer.nat.) em Ciências da Computação pela Universidade de Kaiserslautern (1996). Atualmente é professor Titular da Universidade Federal de Santa Catarina, onde é professor do Programa de Pós-graduação em Ciência da Computação e dos cursos de graduação em Ciências da Computação e Sistemas de Informação. Tem experiência nas áreas de Informática em Saúde, Processamento e Análise de Imagens e Engenharia Biomédica, com ênfase em Telemedicina, Telerradiologia, Sistemas de Auxílio ao Diagnóstico por Imagem e Processamento de Imagens Médicas, com foco nos seguintes temas: analise inteligente de imagens, DICOM, CBIR, informática médica, visão computacional e PACS. Coordena o Instituto Nacional de Ciência e Tecnologia para Convergência Digital - INCoD. Foi o criador e primeiro Coordenador do Núcleo de Telessaúde de Santa Catarina no âmbito do Programa Telessaúde Brasil do Ministério da Saúde e da OPAS - Organização Pan-Americana de Saúde e criador do Núcleo Santa Catarina da RUTE - Rede Universitária de Telemedicina.