Vecteurs
Une coordonnée indique où se trouve un élément. Un vecteur indique comment s'y rendre : une direction et une amplitude (longueur). Dans le développement de jeux vidéo, les vecteurs sont l'outil roi pour positionner des objets par rapport au joueur, calculer des distances et orienter des tirs.
Vector3 : position ou déplacement
Dans ScriptHookVDotNet, GTA.Math.Vector3 incarne aussi bien un point fixe dans l'espace qu'un vecteur de déplacement :
// Utilisé comme une position
Vector3 pointApparition = new Vector3(100f, -200f, 30f);
// Utilisé comme un décalage ou une direction
Vector3 pasEnAvant = new Vector3(0f, 2f, 0f);
Placer un objet devant le joueur : ForwardVector
L'opération vectorielle la plus fréquente consiste à faire apparaître un objet droit devant le joueur, quelle que soit la direction vers laquelle il regarde.
Chaque entité possède une propriété ForwardVector : un vecteur unitaire normalisé (d'une longueur exacte de 1 mètre) orienté dans la direction du regard :
Ped player = Game.Player.Character;
Vector3 positionJoueur = player.Position;
Vector3 regard = player.ForwardVector;
// Calculer un point situé exactement à 3 mètres droit devant
Vector3 devantJoueur = positionJoueur + regard * 3.0f;
Si tu souhaites placer l'objet derrière ou en hauteur, combine ou inverse :
- Derrière :
positionJoueur - regard * 3.0f - Au-dessus :
positionJoueur + new Vector3(0f, 0f, 2.0f)
Mesurer la distance entre deux points
Pour savoir si le joueur est arrivé à destination ou s'il se trouve assez près pour parler à un PNJ, mesure l'écart entre leurs positions :
Vector3 cible = new Vector3(250f, -400f, 25f);
float distance = Vector3.Distance(player.Position, cible);
if (distance < 5.0f)
{
GTA.UI.Screen.ShowSubtitle("Tu es arrivé au point de livraison.", 2000);
}
Distance 3D contre distance horizontale 2D
Vector3.Distance(a, b) calcule la distance euclidienne complète en trois dimensions, altitude comprise. Si la cible se trouve sur un viaduc 20 mètres au-dessus du joueur, la distance 3D indiquera plus de 20 mètres alors que le joueur se tient juste sous le pont.
Si seule la proximité horizontale t'intéresse (en ignorant le dénivelé), utilise Vector3.Distance2D :
float distanceHorizontale = Vector3.Distance2D(player.Position, cible);
Direction entre deux entités : la soustraction
Pour obtenir le vecteur orienté d'une entité A vers une entité B, soustrais A de B :
// Vecteur partant du joueur vers l'ennemi
Vector3 versEnnemi = ennemi.Position - player.Position;
// Normaliser pour obtenir la pure direction de longueur 1.0
Vector3 directionVisee = versEnnemi.Normalized;
Dans la leçon suivante, nous découvrons les entités physiques : peds, véhicules et objets du décor.