Um vetor em UnrealScript é apenas uma estrutura que contém os valores X, Y e Z. O uso de vetores simplifica muita coisa na programação de jogos 3D. Os vetores podem ser usados para representar posição, velocidade, aceleração, distância, direção, etc.
UnrealScript possui algumas funções utilitárias para vetores, segue abaixo as duas mais importantes:
- function float VSize( vector A ): Retorna o comprimento do vetor.
- function vector Normal( vector A ): Retorna um vetor Normalizado, ou seja, um vetor cujo comprimento é 1.
A classe Actor possui um vetor chamado Location que indica sua posição atual no mundo 3D.
O exemplo abaixo ilustra os diversos usos de vetores. Foi criado um Actor que se movimenta em direção a uma posição aleatória. Quando ele chega no destino uma nova posição é escolhida.
O exemplo abaixo ilustra os diversos usos de vetores. Foi criado um Actor que se movimenta em direção a uma posição aleatória. Quando ele chega no destino uma nova posição é escolhida.
class TesteVetores extends Actor
placeable;
var vector vDestino;
const VEL = 100;
//Velocidade = 100 UU/Seg (Unidade Unreal / Segundo)
function DefinirNovoDestino()
{
//Escolhe posição aleatória
vDestino.X = -500 + Rand(1001); //-500 a 500
vDestino.Y = -500 + Rand(1001); //-500 a 500
vDestino.Z = 150 + Rand(101); //150 a 250
worldinfo.game.broadcast(self, "NOVO DESTINO: " $ vDestino);
}
event PostBeginPlay()
{
DefinirNovoDestino();
}
//Esta função é chamada a cada Quadro (Frame) pela Unreal Engine
event Tick(float DeltaTime)
{
local vector vDistancia;
local vector vDirecao;
local vector vVelocidade;
local vector vPasso;
vDistancia = vDestino - Location;
//Verificar se o Actor chegou no destino
if( VSize( vDistancia ) < VEL )
{
DefinirNovoDestino();
vDistancia = vDestino - Location;
}
vDirecao = Normal( vDistancia );
vVelocidade = vDirecao * VEL;
vPasso = vVelocidade * DeltaTime;
Move( vPasso );
}
defaultproperties
{
begin object Class=StaticMeshComponent Name=Modelo3D
StaticMesh = Pickups.UDamage.Mesh.S_Pickups_UDamage
end object
Components.add(Modelo3D);
}
Nenhum comentário:
Postar um comentário