quarta-feira, 26 de agosto de 2020

Float, struct e FVector

Neste artigo vamos dar uma olhada rápida em alguns conceitos necessários para posicionar um Actor no espaço 3D. 

Primeiro vamos falar sobre os tipos de variáveis com ponto-flutuante (floating-point). Estes tipos de variáveis são usadas para representar números decimais. Os tipos principais são float, que tem 32 bits, e double, que tem 64 bits.

A maioria do código da Unreal Engine utiliza o tipo float para valores decimais. Estes são alguns exemplos de variáveis float:  

float var1;

float var2 = 7.45F;

float var3 = 8.f;  // É o mesmo que 8.0f 

O sufixo f ou F é necessário para indicar que um valor é do tipo float porque por padrão os valores com ponto são do tipo double.  

Outro conceito importante é o de estrutura. Uma estrutura é usada para reunir em um único lugar diversas variáveis relacionadas. As variáveis que fazem parte de uma estrutura podem ser de tipos diferentes. Você também pode ter estruturas que contém outras estruturas.

Para definir uma estrutura em C++ use a palavra chave struct. Em C++ é possível adicionar funções às estruturas, deixando elas muito parecidas com uma classe. A única diferença entre struct e class em C++ é que os membros de uma estrutura são public por padrão e os membros de uma classe são private por padrão.

Na Unreal Engine, as estruturas são representadas por tipos que possuem o prefixo F como FVector e FTransform por exemplo. Se você usar um tipo/classe que tem o prefixo U ou A, você deve criar um ponteiro. Mas para os tipos com prefixo F, você não precisa criar um ponteiro.

A estrutura FVector contém três variáveis do tipo float que são X, Y e Z. O exemplo a seguir mostra a criação de duas variáveis do tipo FVector contendo os mesmos valores para XY e Z.

FVector MyVector1;
MyVector1.X = 500.f;
MyVector1.Y = 700.f;
MyVector1.Z = 300.f;

FVector MyVector2 = FVector(500.f, 700.f, 300.f);

Observe que para acessar as variáveis da estrutura foi utilizado um ponto (.) entre o nome da estrutura e o nome da variável. Você só deve usar o -> quando estiver usando ponteiros.

A classe AActor possui uma função para definir a posição de um Actor no espaço 3D. O nome da função é SetActorLocation() e ela recebe como parâmetro um FVector com a nova posição.

O exemplo abaixo mostra duas formas de chamar o SetActorLocation():

FVector NewLocation = FVector(300.f, 200.f, 100.f);
SetActorLocation(NewLocation);

//É o mesmo que:

SetActorLocation( FVector(300.f, 200.f, 100.f) );


Sumário C++