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 .
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 :
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é.
Entité |
Type |
Description |
---|---|---|
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 :
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é.
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 :
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.
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
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é.
Il n'y a qu'un output : OnPass qui est déclenché quand le train passe par le path.
Entité |
Type |
Description |
---|---|---|
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.
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 :
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
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 :
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 named |
Targets entities |
Via this input |
Parameter |
Delay |
---|---|---|---|---|
OnTrigger |
path_2 |
EnableAlternatePath |
<none> |
0.00 |
Reportez-vous à la première partie pour les inputs des path_track .
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
:
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 :
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 .