Certains des obstacles les plus faciles à franchir se déplacent simplement d'avant en arrière. Vous rencontrerez souvent ces obstacles dans les défis de plateforme, où vous devez synchroniser vos sauts et faire attention à vos mouvements sous peine de tomber.
Le déplacement d'une plateforme de cette manière est appelé translation ou changement de position de la transformation d'un objet. Dans cette section, vous apprendrez à créer des plateformes qui non seulement se déplacent d'avant en arrière, mais qui peuvent aussi se déplacer vers plusieurs points dans le monde, puis à les utiliser pour créer votre premier obstacle !
Créer des accessoires qui se déplacent
Procédez comme suit pour créer le code qui déplace vos plateformes :
Créez une nouvelle classe Verse nommée
translating_propqui hérite demovable_propà l'aide de l'explorateur Verse. Ajoutez le spécificateur<concrete>à cette classe pour exposer ses propriétés à l'UEFN.Verse# A prop that moves (translates) toward either a Creative prop target # or a position in world space. translating_prop<public> := class<concrete>(movable_prop):Ajoutez les instructions
using { /Fortnite.com/Devices/CreativeAnimation }etusing { /UnrealEngine.com/Temporary/SpatialMath }en haut du fichier pour importer ces modules. Vous en aurez besoin pour animer votre accessoire. Les infobulles utilisées dans cette section sont également répertoriées ici.Verseusing { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/SpatialMath } MovePositionTip<localizes>:message = "The optional position to move to World Space. Use this if you do not want to set a MoveTarget." # A prop that moves (translates) toward either a Creative prop target # or a position in world space. translating_prop<public> := class<concrete>(movable_prop):Ajoutez les champs suivants au sommet de la définition de la classe
translating_prop:Une matrice modifiable de
creative_propnomméeMoveTargets. Il s'agit des accessoires en mode Créatif vers lesquels votreRootPropse déplacera pendant le jeu. En utilisant un autre accessoire plutôt qu'une transformation comme cible à atteindre, il est plus facile de visualiser la direction prise par vos accessoires. Plus tard, vous les rendrez invisibles pendant le jeu dans l'éditeur.Verse# The Creative prop targets for the RootProp to move toward. @editable {ToolTip := MoveTargetsTip} var MoveTargets:[]creative_prop = array{}Une variable facultative
vector3modifiable nomméeMovePosition. Si vous n'assignez pas d'accessoireMoveTarget, votre accessoire racine l'utilise pour savoir où se déplacer.Verse# The position for the RootProp to move toward. Use this if you # do not want to set a MoveTarget. @editable {ToolTip := MovePositionTip} var MovePosition:?vector3 = falseUne variable
vector3nomméeTargetPosition. Il s'agit de la position vers laquelle l'accessoire va effectivement se déplacer ; celle-ci sera configurée soit sur la position de la cible du déplacement, soit en fonction de la variableMovePosition.Verse# The position the prop is currently targeting. var TargetPosition:vector3 = vector3{}La définition de votre classe devrait ressembler à ceci :
Verse# A prop that moves (translates) toward either a Creative prop target # or a position in world space. translating_prop<public> := class<concrete>(movable_prop): # The Creative prop targets for the RootProp to move toward. @editable {ToolTip := MoveTargetsTip} var MoveTargets:[]creative_prop = array{} # The optional position for the RootProp to move toward. Use this if you # do not want to set a MoveTarget.
Dans la mesure où vous avez déjà configuré la fonction
Move()qui déplace votre accessoire dansmovable_prop, vous pouvez la remplacer dans cette classe. Remplacez la fonctionMove()dans votre classetranslating_prop.Verse# Translate toward the MovePosition, or MoveTarget if one is set. Move<override>()<suspends>:void=Dans
Move(), dans une expressionif, vérifiez si la variableMovePositionest définie et stockée dans la valeurNewPosition. Si c'est le cas, définissezTargetPositionsurNewPosition.Verse# Translate the RootProp toward the MoveTarget, or MovePosition if one is set. Move<override>()<suspends>:void= # Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPositionVotre fonction
MoveToEase()doit disposer d'unanimation_modeauquel elle sera transmise. Votre animation est lue une fois chaque fois que la fonctionMove()est appelée, et leanimation_modecontrôle ce qui se passe à la fin de votre animation. AppelezMoveToEase()pour transmettre les valeursTargetPosition,MoveDurationetMoveEaseType, ainsi queanimation_mode.OneShot. L'utilisation de ce mode d'animation signifie que votre animation s'arrêtera une fois que votre objet aura atteint sa cible. Il s'agit de la fonction surchargéeMoveToEase()que vous avez configurée précédemment et qui ne prend pas en charge la rotation ou le changement d'échelle.Verse# Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPosition # Call MoveToEase to start moving the prop. The OneShot animation mode will play the animation once. RootProp.MoveToEase(TargetPosition, MoveDuration, MoveEaseType, animation_mode.OneShot)Le mode d'animation OneShot est utile si l'on souhaite réinitialiser l'objet ou le maintenir en mouvement, mais qu'en est-il l'on souhaite le jouer en sens inverse ? Dans ce cas, vous pouvez utiliser le mode d'animation
PingPong. L'animation sera jouée, puis jouée en sens inverse pour ramener l'accessoire à son point de départ. Il existe aussi le mode d'animationLoop, qui joue en boucle votre animation, mais qui exige que cette animation se termine à l'emplacement où elle a commencé. Choisissez le mode d'animation correspondant aux besoins de votre expérience.Lorsque vous configurez vos accessoires, si vous n'avez pas défini
MovePositiondans l'éditeur, vous devez définir une ou plusieursMoveTargetsvers lesquelles votre accessoire racine se déplacera. Pour gérer lesMoveTargetsdans une expressionfor, itérez à chaque cible dansMoveTargets. Vérifiez siMoveTargetest définie en appelantIsValid[]. Si tel est le cas, définissez la position cibleTargetPositionsur le déplacement de laMoveTarget.Verse# Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPosition else: for: MoveTarget:MoveTargets do: # Set the TargetPosition to the MoveTarget's position if theEnfin, appelez
MoveToEase(), toujours avecanimation_mode.OneShotcomme mode d'animation. En procédant de la sorte dans une expressionfor, vous déplacerez votre accessoire vers chacune des cibles à tour de rôle, en la réinitialisant à la fin ou en poursuivant le déplacement en fonction des paramètres que vous avez définis. Votre fonction`Move()`complète devrait ressembler à ceci :Verse# Translate the RootProp toward the MoveTarget, or MovePosition if one is set. Move<override>()<suspends>:void= # Set the TargetPosition to the MovePosition if it is set. if: NewPosition := MovePosition? then: set TargetPosition = NewPosition # Call MoveToEase to start moving the prop. The OneShot animation mode will play the animation once.
Créer l'appareil Verse
Maintenant que votre code Verse est complet, vous avez besoin d'un moyen de l'appeler dans le niveau. Vous utiliserez un autre appareil Verse pour coordonner vos accessoires et les configurer au début de la partie. Procédez comme suit pour coordonner vos obstacles et déplacer vos plateformes !
Créez un nouvel appareil Verse nommé
prop_animatoren utilisant l'explorateur Verse. Il s'agit de l'appareil qui coordonnera le déplacement de vos accessoires.Dans
prop_animator, ajoutez une matrice modifiable detranslating_propnomméeTranslatingProps. Ensuite, dansOnBegin(), dans une expressionfor, appelezSetup()sur chaque accessoire. Votre fichierprop_animatorcomplet devrait ressembler à ceci :Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } TranslatingPropsTip<localizes>:message = "The props that translate (move) using animation." # Coordinates moving props through animation by calling each moveable_prop's Setup() method. prop_animator := class(creative_device): # Array of moveable_props that translate using animation.Enregistrez votre code et compilez-le.
Faites glisser votre appareil
prop_animatordans le niveau.
Lier des accessoires aux appareils
De retour dans l'éditeur, supprimez certains des accessoires situés près du début pour créer un vide. Ajoutez deux accessoires FG01 Plaque de lévitation M à votre niveau. Étant donné qu'il s'agit des plateformes que vous allez animer, nommez-les TranslatingPlatform. Ajoutez ensuite plusieurs accessoires FG01 Bouton Ampoule, qui seront les cibles vers lesquelles chaque plateforme se déplacera. Nommez-les PlatformTarget. Placez les plateformes dans le vide créé et assurez-vous de placer les cibles là où vous voulez que les plateformes aillent. Vous pouvez spécifier plusieurs cibles pour chaque plateforme.
Configuration du déplacement d'accessoires. Chaque plateforme se déplace d'avant en arrière entre deux cibles de déplacement, comme indiqué par les flèches.
Si vous souhaitez masquer les accessoires cibles pendant le jeu, assurez-vous de définir Acteur caché dans le jeu sous Rendu sur True pour chaque cible.
Faites glisser votre appareil prop_animator dans le niveau et sélectionnez-le. Dans l'organiseur, ajoutez un élément de matrice à TranslatingProps pour chaque plateforme. Assignez à chaque accessoire les valeurs suivantes :
| option | Valeur | Explication |
|---|---|---|
MoveTargets | Assigner aux cibles vers lesquelles vous souhaitez que l'accessoire se déplace. | Il s'agit des cibles d'accessoire en mode Créatif vers lesquelles votre accessoire se déplacera, dans l'ordre. |
RootProp | Assigner à l'accessoire que vous animez. | Il s'agit de l'accessoire que vous animez. |
Cliquez sur Lancer la session et voyez vos plateformes s'animer ! Essayez de varier les valeurs MoveDuration et MoveEaseType, ainsi que les délais de début et de fin pour créer différents scénarios.
Maintenant que nous avons discuté de la translation, dans la section suivante, vous allez créer des accessoires qui tournent dans différentes directions !
Suivant
Code complet
Voici le code complet généré dans cette section :
translating_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/SpatialMath }
MovePositionTip<localizes>:message = "The optional position to move to World Space. Use this if you do not want to set a MoveTarget."
# A prop that moves (translates) toward either a Creative prop target
# or a position in world space.
translating_prop<public> := class<concrete>(movable_prop):
prop_animator.verse
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
TranslatingPropsTip<localizes>:message = "The props that translate (move) using animation."
# Coordinates moving props through animation by calling each moveable_prop's Setup() method.
prop_animator := class(creative_device):
# Array of moveable_props that translate using animation.