Aller au contenu principal

Coordonnées

Tout élément dans Los Santos existe à un emplacement défini par trois nombres : X, Y et Z. Que tu veuilles placer un passant sur un trottoir, détecter l'entrée du joueur dans une ruelle ou afficher un repère de mission, maîtriser ce système de repérage est obligatoire.

Les trois axes du monde

GTA V utilise un repère cartésien orienté à droite, exprimé en mètres :

  • Axe X (Est / Ouest) : Les valeurs positives vont vers l'Est (Tataviam Mountains), les valeurs négatives vers l'Ouest (Pacific Bluffs).
  • Axe Y (Nord / Sud) : Les valeurs positives vont vers le Nord (Mont Chiliad, Paleto Bay), les valeurs négatives vers le Sud (l'aéroport international de Los Santos).
  • Axe Z (Altitude) : Les valeurs positives montent vers le ciel. Le niveau 0 correspond à peu près au niveau de la mer. Les valeurs négatives descendent dans les fosses océaniques ou les tunnels de métro.
Nord (+Y)
|
|
Ouest (-X) -------+-------- Est (+X)
|
|
Sud (-Y)

Haut (+Z) / Bas (-Z)

L'origine du monde : (0, 0, 0)

Le point d'origine (0, 0, 0) ne se situe pas au centre-ville. Il est placé au large, au sud-ouest de Los Santos, au niveau de l'eau. Legion Square, le cœur historique de la ville, se situe approximativement à (190f, -850f, 30f). Le sommet du Mont Chiliad culmine à (501f, 5604f, 797f).

Lire une position en C#

On accède aux coordonnées d'une entité via sa propriété Position, qui renvoie un GTA.Math.Vector3 :

using GTA;
using GTA.Math;

Ped player = Game.Player.Character;
if (player != null && player.Exists())
{
Vector3 positionActuelle = player.Position;
float x = positionActuelle.X;
float y = positionActuelle.Y;
float z = positionActuelle.Z;

GTA.UI.Screen.ShowSubtitle($"Pos : X={x:F1}, Y={y:F1}, Z={z:F1}", 1000);
}

Le piège du sol : assurer le contact physique

Si tu choisis des coordonnées sur une carte ou devines une altitude au hasard, faire apparaître une entité directement à ce Z risque de la faire flotter dans les airs ou s'enfoncer sous la route.

Pour caler proprement une entité sur le maillage de collision du terrain, utilise World.GetGroundHeight :

Vector3 pointVoulu = new Vector3(200f, -800f, 50f);
float hauteurSol = World.GetGroundHeight(pointVoulu);
Vector3 pointSur = new Vector3(pointVoulu.X, pointVoulu.Y, hauteurSol);

Dans la leçon suivante, nous abordons les vecteurs : calculer des directions, des projections vers l'avant et des distances.