Aller au menu - Aller au contenu

Icône Les path_track

Mise à jour : 24/01/2012
Difficulté : Facile Facile
2 942 visites depuis 7 jours, dont 40 sur ce chapitre classé 54/786
Ici, on ne rigole plus. Il est temps de voir ce que sont les path_track !

Derrière ce nom un peu barbare, se trouve en réalité quelque chose de simple à comprendre (le nom, c'est juste pour effrayer), mais complexe à utiliser. Nous allons tout de suite entrer dans le vif du sujet :) .
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Que sont les path_track ?

path_track est à la fois le nom d'une entité, et à la fois un terme qu'ont les mappeurs pour désigner un moyen de faire bouger des entités en suivant un chemin déterminé.

Un chemin : c'est la clé d'utilisation des path_track. Path veut dire chemin et track, ça veut dire voie.

Les path_track servent à définir un chemin - un itinéraire - par lequel va se déplacer une entité, généralement un func_tracktrain. Dans func_tracktrain, il y a le mot train. Quand on parle de path_track pour désigner le moyen de déplacer des entités, on peut aussi parler de train.

Regardez cette petite mise en situation :

Image utilisateur


Le joueur doit franchir le passage, sans tomber dans l'eau. Pour ce faire, j'ai créé une plateforme qui se déplacera en suivant l'itinéraire que j'ai tracé en utilisant mes talents de graphiste (le premier kiri... :-° ). Grâce aux path_track, nous allons définir cet itinéraire pour que la plateforme le suive et amène le joueur de l'autre côté.

Depuis HL1, on appelle "train" l'objet qui suit l'itinéraire de path_track. On peut dire que l'itinéraire est la voie ferrée, et la plateforme est le train. Par la suite, quand je parlerai de l'objet qui suit l'itinéraire, je parlerai de train. Et d'ailleurs, je ne suis pas le seul, puisque Valve définit aussi le train de cette manière.

Tracer l'itinéraire

Entité étudiée
EntitéTypeDescription
path_track Point Permet définir un point de passage pour un "train"


Dans un premier temps, il convient de placer un premier path_track qui fera office de point de départ. Placez-le, si possible, au centre de la plateforme, et donnez-lui comme nom path_0 (soyons geeks, comptons à partir de 0 ^^ ), comme ceci :

Image utilisateur


Le truc est de placer un path_track à chaque angle pour indiquer à la plateforme qu'elle va devoir changer de direction. Ainsi, dans mon exemple, j'ai besoin de 4 path_track : le départ, le premier angle, le deuxième, et l'arrivée.

Pour placer le deuxième path_track, il y a deux méthodes : une normal, et une super facile pour les faignants. La méthode normale est tout simplement de créer un autre path_track avec l'outil de création d'entités. Il faut ensuite nommer l'entité.
La deuxième méthode, ma préférée, consiste à dupliquer le path_track déjà créé (souvenez-vous, vous sélectionnez l'entité, et en maintenant la touche Shift (Majuscule) enfoncée, vous déplacez l'entité). Et c'est là que la fainéantise se dévoile : Hammer renomme automatiquement la nouvelle entité, en ajoutant une unité : path_0 devient donc path_1.

Ouvrez les propriétés de path_0. La propriété Next Stop Target vaut path_1. Cette propriété sert à définir quel sera le prochain path_track que la plateforme devra atteindre. C'est pour ça que la deuxième méthode est pratique, car c'est Hammer qui va s'occuper de définir cette propriété.

C'est pour cette raison qu'il est préférable de toujours nommer vos path_track sous la forme nomDuPath_numéro. Si vous nommez nomDuPath_a, Hammer va nommer le suivant nomDuPath_a1.


Ainsi, de fil en aiguille, en dupliquant à chaque fois le dernier path_track, vous allez créer votre chemin. Vous pouvez vérifier que le chemin est correctement créé en regardant les vues Top et 3D : une ligne relie les différents path_track, comme ceci :

Image utilisateur


Les propriétés



Il faut savoir que les path_track, en plus d'agir comme des "angles", agissent un peu comme des points de contrôle à partir desquels il est possible par exemple de définir une nouvelle vitesse pour l'élément qui suit le trajet (ici la plateforme).

Les tracks ont donc la propriété New Train Speed qui permet de redéfinir la vitesse du train dès qu'il franchit le point. Une valeur de 0 permet de conserver la vitesse du train (il n'y a donc pas de changement de vitesse).

La propriété Branch Path ressemble à Next Stop Target, mais sert à faire un aiguillage (comprenez, un chemin alternatif au chemin normal). J'y reviendrai avec un exemple.

Orientation Type sert à redéfinir l'orientation que prendra le train :
  • Face direction of motion : si le path_track dit d'aller à droite, le train va s'orienter pour tourner à droite (il s'oriente en fait face un path_track suivant). C'est le comportement normal d'un honnête train.
  • No change : la direction reste toujours la même. C'est la valeur que je choisis pour mon exemple, puisque je n'ai pas besoin que la plateforme s'oriente (elle est carrée, et puis ça ne sert à rien ^^ ).
  • Face this path_track's angles : le train s'oriente en fonction de l'angle du path_track.


Côté flags



  • Disabled : le path est désactivé, le train ne peut donc pas passer par là. Il faudra donc activer ce path_track avec un input (EnablePath)
  • Fire once : le train ne peut passer qu'une seule fois sur ce path. Après le passage du train, l'entité est désactivée
  • Branch reverse : Branch Path fait office de Next Stop target (et à fortiori, Next Stop Target fait office de Branch Path)
  • Disable train : le train s'arrête sur ce path


Inputs et Outputs



Inputs



Parmi les inputs, en voici quelques-uns qui peuvent se révéler utiles :

ToggleAlternatePath, EnableAlternatePath et DisableAlternatePath : ces inputs permettent de contrôler l'aiguillage. Si vous l'activez, le path spécifié dans la propriété Branch Path sera activé, et le train suivra ce chemin.

TogglePath, EnablePath et DisablePath : ceux-ci permettent, comme vous devriez le deviner, de contrôler l'état du path_track : toggle, activé et désactivé.

Output



Il n'y a qu'un output : OnPass qui est déclenché quand le train passe par le path.

Maintenant, le train

Entité étudiée
EntitéTypeDescription
func_tracktrain Bloc Permet créer un train parcourant un chemin de path_track


Le chemin est mis en place, passons au train (à la plateforme).

Sélectionnez toute votre plateforme, et transformez-la en func_tracktrain.

Attention, l'avant du train doit toujours être orienté à l'est (du côté droit de la vue Top), sinon votre train sera mal positionné dans le jeu.



A l'inverse des path_track, func_tracktrain possède assez bien de propriétés. Comme toujours, leur fonctionnement est généralement simple. Je fais comme d'habitude l'impasse sur les propriétés déjà connues.

Func_tracktrain permet de définir les propriétés globales du train. Les path_track peuvent modifier certaines valeurs (comme la vitesse), mais si par exemple la vitesse maximale du train est fixée à 100 unités/seconde, un path_track ne peut pas définir une nouvelle vitesse de 150 unités/secondes. C'est donc les propriétés du func_tracktrain qui prévalent sur celles des path_track

  • First Stop Target : une des propriétés les plus importantes : le nom du path_track de départ. Mettez donc path_0 pour coller à mon exemple.
  • Max Speed : la vitesse maximale du train.
  • Initial Speed : la vitesse initiale du train. 0 = arrêt.
  • Change Velocity : c'est la façon dont le train change de vitesse, si une nouvelle vitesse est spécifiée dans le path_track qu'il traverse. Je vous conseille de laisser Instantaneously.
  • Change angles : changement de direction. Mettez Never pour que le train ne change pas de direction à chaque part_track. Cette propriété prévaut donc dur les propriétés Orientation Type des path_track
  • Distance Between the Wheels : la distance entre les roues de devant et celles de derrière. Si vous faites un "vrai" train (un wagonnet sur des rails par exemple), cette valeur est importante et permet au moteur Source de mieux gérer les tournants. Ici, c'est pas important. Si vous avez dur de mesurer la distance, mettez la longueur du train, et ça devrait marcher :) .
  • Height above track : la distance entre le train et les "rails" (si on voit des rails, ce qui n'est pas le cas dans notre exemple).
  • Bank Angle on Turns : le degré d'inclinaison du train quand il prend un tournant. Laissez 0, le moteur Source saura bien se débrouiller seul ^^ .



Les autres propriétés sont en rapport avec le bruit de train, c'est facile à comprendre :) .

Voici maintenant quelques flags :

  • No Pitch : le train ne tangue pas (il ne balance pas de gauche à droite dans les tournants).
  • No User Control : le train n'est pas contrôlable par le joueur (avec un func_traincontrols).
    <puce>Passable : le joueur passe au travers.
  • Fixed orientation : l'orientation est toujours la même. J'ai coché ce flag pour mon exemple.


Comme mon train est arrêté par défaut (Initial Speed valant 0), il faut que le train démarre quand le joueur se positionne dessus. Pour cela, rien de plus facile : un trigger_once qui déclenche le démarrage (en marche avant du train : StartForward) du train :

Image utilisateur


Voici quelques inputs utiles :

  • Stop : stoppe le train
  • StartForward : démarre le train, en marche avant
  • StartBackward : démarre le train, en marche arrière
  • Resume : redémarre le train s'il avait été stoppé (le contraire de Stop en fait)
  • Reverse : inverse la direction du train


Si vous utilisez la marche arrière (Reverse et StartBackward), vous devez absolument, dans tous les path_track, avoir la propriété New Train Speed non-nulle. Si vous mettez 0, le train va soit s'arrêter, soit ne pas reculer (avancer vers l'avant) et je ne sais quoi d'autre. C'est gros bug avec le Source Engine, et il faut faire avec.

Avec un aiguillage

Je vous ai parlé du Branch Path qui permet de spécifier un chemin alternatif à un path_track. Nous allons donc le mettre en pratique pour faire un l'itinéraire pourvu d'un aiguillage. Voici la maquette :

Image utilisateur


L'aiguillage se fait donc sur le path_2. Sa propriété Branch Path pointe sur le premier path_track du petit chemin dans le bas à gauche de l'image.

J'ai créé un trigger_once (le bloc sélectionné sur l'image). Si le joueur le traverse, le chemin alternatif est activé, et le train sera aiguillé vers la deuxième sortie, en suivant ma jolie flèche verte. L'output est défini de cette façon :

Output namedTargets entitiesVia this inputParameterDelay
OnTrigger path_2 EnableAlternatePath <none> 0.00


Reportez-vous à la première partie pour les inputs des path_track ;) .

Mouvement perpétuel

La boucle



Il est possible de faire un train qui tourne en rond, qui n'a pas de fin. Ca peut être pratique ^^ .
Faire ce genre de truc est très très simple puisqu'il suffit de connecter le dernier path_track du chemin au path_track de départ. Ainsi, quand le train passe par le dernier path, il est dirigé vers le premier, et le cycle recommence :) :

Image utilisateur


Le va-et-vient



Si vous avez joué à Portal, vous devez certainement comprendre d'où vient mon inspiration pour les plateformes qui se déplacent ^^ . Si vous n'avez pas joué à Portal, sachez qu'il y a plusieurs épreuves qui se déroulent en utilisant des plateformes de ce type.
Il y a aussi une autre version de la boucle infinie qui consiste à faire bouger la plateforme d'un point A vers un point B, puis du point B vers le point A. Bref, la plateforme fait continuellement un aller-retour entre les deux extrémités du chemin :

Image utilisateur


Il n'y a pas de secret, ça fonctionne exactement comme la boucle infinie. Le point A pointe vers B, et B pointe vers A :) .
Des utilisations des path_track, il y en a des tonnes.

L'utilisation de base est de faire des trains, mais j'ai choisi de vous les enseigner avec des plateformes. C'est un choix discutable, mais ça me permettait de faire des schémas simples, des mises en situation simples et d'avoir une configuration minimale.

Le must est d'utiliser les path_track pour faire un train qui accélère sur une longue distance, qui ralentit dans un tournant et qui reprend de la vitesse après. D'ailleurs, en parlant de tournants, si vous en faites des vrais, il vous faudra plusieurs path_track, pour ne pas que le train tourne "d'un coup", sinon ça sera particulièrement moche et pas réaliste ;) .

On peut aussi utiliser les path_track pour faire un ascenseur sur plusieurs étages (sur un étage, une func_door suffit ^^ ), dans lequel chaque path_track est un arrêt d'étage. C'est plus complexe à gérer, mais c'est possible :) .

Chapitre précédent Sommaire Chapitre suivant

Partager

5 commentaires pour "Les path_track"
Note moyenne : 3.89 / 4 (103 votes)
Pseudo Commentaire
Hors ligne Nakio # Posté le 14/05/2008 à 16:29:30
C != C++
Avatar

Ville : Crest
Pays : France métropolitaine

Encore une super tuto et pratique ! Je met: 19 ! :)

Attention à la fin, c'est pas très gentil de dire qu'on put :p .

Citation : Thunderseb
On peut aussi utiliser les path_track...
Hors ligne anonyme # Posté le 15/09/2008 à 20:26:39

je n'est pa reussi la fonction du path track
la 1er foi que jai essayer (HL2.exe acesser de fonctionner)
la 2eme foi marche pas et insi de suite)
(c'est pour ça quil a dit quon put(enfin c'est pour moi lol))
Hors ligne har1bo # Posté le 07/12/2008 à 19:34:38
Genre.

Petite faute de frappe :
Citation : Thunderseb

Dans un premier temps, il convient de placer un premier path_track qui fera office de point de départ. Placez-le, si possible, au centre de la plateforme, et donnez-lui comme nom path_0 (soyons geeks, comptons à partit de 0 ^^ ), comme ceci :

#LGDF: har1bo vaincra !
Image utilisateurImage utilisateurImage utilisateur


Citation : Kelth'
Tellement le topic L'Univers de Valve parle de tout et de rien il devrait s'appelé L'Univers tout cours
 
Hors ligne tomix16 # Posté le 30/04/2009 à 14:37:47
Avatar

très bon tuto je met 20/20 mise a part les petite faute d'orthographe ce tuto est très bien expliquer ;) j'ai envie de dire "whawe" ^^
Hors ligne myuline # Posté le 12/04/2012 à 20:42:29

Avis : Très bon

Je voudrais faire quelque chose:
Pour ceux qui jouent à Portal 2, je vais parler des ascenseurs qui coupent les salles. Vous voyez qu'il ralentissent vers la fin de leur mouvement, et que les portes s'ouvres ~1.5s après l’arrêt. Je voudrais faire le même mouvement, et si possible le même système de porte avec un convoyeur (dans Portal 2).

Comment on fait pour ralentir le mouvement, et quels models ont des portes, comment les faire s'ouvrir après arrêt? Je précise que je ne veut pas faire un ascenseur, mais un "train" (je préfère dire "convoyeur pour éviter la confusion avec un vrai train).
Merci!

Cordialement: Myuline; apprenti mappeur du Source Engine, infographiste sous Blender, et re-apprenti du langage html et css.
 

Voir tous les commentaires