Parfois, dans les jeux de plateforme, on rencontre des obstacles qui changent de dimension. Il peut s'agir de plateformes dont la taille augmente ou diminue, ou qui deviennent plus hautes ou plus courtes le long d'un certain axe. Lorsque les dimensions d'un objet sont modifiées de cette manière, on parle de modification de son échelle.
L'échelle d'un objet indique de combien il faut multiplier chacune de ses dimensions par rapport à lui-même. Normalement, les objets ont une échelle de {X := 1.0, Y := 1.0, Z := 1.0}. Si vous doublez la valeur Z de l'échelle d'un objet, celui-ci devient deux fois plus grand. Si vous la réduisez de moitié, il sera deux fois plus petit.
L'échelle est la dernière pièce du puzzle de la transformation. Dans cette section, vous apprendrez à manipuler l'échelle pour créer des objets qui grandissent et rétrécissent à différentes tailles.
Créer des accessoires qui changent d'échelle
Procédez comme suit pour créer le code qui permet de changer l'échelle de vos accessoires :
-
Créer une nouvelle classe Verse nommée
scaling_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.# Un accessoire qui s'adapte à une échelle donnée ou à l'échelle d'un accessoire en mode Créatif. scaling_prop<public> := class<concrete>(movable_prop): -
Ajoutez les instructions
using { /Fortnite.com/Devices/CreativeAnimation }etusing { /UnrealEngine.com/Temporary/SpatialMath }au début 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.using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "La position facultative vers laquelle se déplacer dans l'espace du monde. Utilisez-la si vous ne souhaitez pas définir de MoveTarget." # Un accessoire qui s'adapte à une échelle donnée ou à l'échelle d'un accessoire en mode Créatif. scaling_prop<public> := class<concrete>(movable_prop): -
Ajoutez les champs suivants en haut de la définition de la classe
scaling_prop.-
Une matrice
vector3modifiable deScaleTargets. Il s'agit des échelles auxquelles votre accessoire va grandir et rétrécir. Une fois la fonctionMove()terminée, l'échelle de l'accessoire sera multipliée par cette valeur.# La matrice de cibles vector3 pour le changement d'échelle du RootProp. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} -
Un
creative_propfacultatif et modifiable nomméMatchScaleTarget. Si vous voulez que votre accessoire s'adapte à l'échelle d'un autre accessoire, vous pouvez définir cette valeur plutôt que d'utiliser desScaleTargets. Par exemple, vous pouvez utiliser cette fonction pour créer une série de plateformes qui atteignent toutes la même taille avant d'être réinitialisées.# L'accessoire facultatif en mode Créatif dont l'échelle doit correspondre à celle du RootProp. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false -
Une variable
rotationnomméeTargetScale. Il s'agit de l'échelle qui sera appliquée à l'accessoire.# L'échelle que l'accessoire cherche à atteindre. var TargetScale:vector3 = vector3{}
-
-
La définition finale de votre classe devrait ressembler à ceci :
using { /Fortnite.com/Devices } using { /Fortnite.com/Devices/CreativeAnimation } using { /Verse.org/Simulation } } using { /UnrealEngine.com/Temporary/SpatialMath } MatchScaleTargetTip<localizes>:message = "La position facultative vers laquelle se déplacer dans l'espace du monde. Utilisez-la si vous ne souhaitez pas définir de MoveTarget." # Un accessoire qui s'adapte à une échelle donnée ou à l'échelle d'un accessoire en mode Créatif. scaling_prop<public> := class<concrete>(movable_prop): # La matrice de cibles vector3 pour le changement d'échelle du RootProp. @editable {ToolTip := MoveTargetsTip} var ScaleTargets:[]vector3= array{} # L'accessoire facultatif en mode Créatif dont l'échelle doit correspondre à celle du RootProp. @editable {ToolTip := MatchScaleTargetTip} var MatchScaleTarget:?creative_prop = false # L'échelle que l'accessoire cherche à atteindre. var TargetScale:vector3 = vector3{} -
Puisque 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 classescaling_prop. DansMove(), vérifiez d'abord siMatchScaleTargetest définie et sauvegardez-la dans une variableScaleToMatch. Si tel est le cas, définissez l'échelleTargetScalesur l'échelleScaleToMatch, puis appelezMoveToEase(), en transmettant l'échelleTargetScale, la duréeMoveDuration, le typeMoveEaseTypeet le modeanimation_mode.OneShot. Il s'agit de la fonctionMoveToEase()que vous avez surchargée plus tôt et qui ne modifie que l'échelle.# Changer l'échelle du RootProp en fonction de ScaleTarget ou de MatchScaleTarget s'il y en a une. Move<override>()<suspends>:void= # Définir TargetScale sur MatchScaleTarget si elle est définie. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Appeler MoveToEase pour commencer la mise à l'échelle de l'accessoire. Le mode d'animation OneShot joue l'animation une seule fois. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
Si vous n'avez pas défini de
MatchScaleTarget, vous devez itérer à travers votre matriceScaleTargets. Dans une expressionfor, itérez à travers chaqueScaleTargetdansScaleTargetset définissezTargetScalesur laScaleTarget. Ensuite, appelezMoveToEase(), en transmettant les mêmes valeurs que précédemment. Votre fonctionMove()complète devrait ressembler à ceci :# Changer l'échelle du RootProp en fonction de ScaleTarget ou de MatchScaleTarget s'il y en a une. Move<override>()<suspends>:void= # Définir TargetScale sur MatchScaleTarget si elle est définie. if: ScaleToMatch := MatchScaleTarget?.GetTransform().Scale then: set TargetScale = ScaleToMatch # Appeler MoveToEase pour commencer la mise à l'échelle de l'accessoire. Le mode d'animation OneShot joue l'animation une seule fois. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) else: # Sinon, le changement d'échelle se fait pour chaque cible de la matrice ScaleTargets. for: ScaleTarget:ScaleTargets do: set TargetScale = ScaleTarget # Appeler MoveToEase pour commencer la mise à l'échelle de l'accessoire. Le mode d'animation OneShot joue l'animation une seule fois. RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot) -
Dans votre classe d'appareil
prop_animator, ajoutez une nouvelle matrice modifiable descaling_propnomméeScalingProps. Ajoutez une autre expressionforàOnBegin()qui passe en boucle tous les accessoires à mettre à l'échelle et appelleSetup()sur eux. Votre classeprop_animatormise à jour devrait ressembler à ceci :using { /Fortnite.com/Devices } using { /Verse.org/Simulation } } using { /UnrealEngine.com/Temporary/Diagnostics } TranslatingPropsTip<localizes>:message = "Les accessoires qui se déplacent grâce à l'animation." RotatingPropsTip<localizes>:message = "Les accessoires qui tournent grâce à l'animation". ScalingPropsTip<localizes>:message = "Les accessoires qui changent d'échelle grâce à l'animation". # Coordonne le déplacement des accessoires grâce à l'animation en appelant la méthode Setup() de chaque accessoire. prop_animator := class(creative_device): # Matrice de movable_props qui se déplacent grâce à l'animation. @editable {ToolTip := TranslatingPropsTip} TranslatingProps:[]translating_prop = array{} # Matrice de movable_props qui tournent grâce à l'animation. @editable {ToolTip := RotatingPropsTip} RotatingProps:[]rotating_prop = array{} # Matrice de movable_props qui changent d'échelle grâce à l'animation. @editable {ToolTip := ScalingPropsTip} ScalingProps:[]scaling_prop = array{} # S'exécute à l'activation de l'appareil dans une partie en cours. OnBegin<override>()<suspends>:void= # Pour chaque accessoire, appeler Setup() pour commencer l'animation. for: Prop:TranslatingProps do: Prop.Setup() for: Prop:RotatingProps do: Prop.Setup() for: Prop:ScalingProps do: Prop.Setup() -
Enregistrez votre code et compilez-le.
Lier des accessoires à des appareils
De retour dans l'éditeur, supprimez certains des accessoires après la section des accessoires rotatifs, mais avant les blocs surélevés, afin de créer un autre espace libre. Ajoutez un FG01 Gant de frappe à votre niveau. Nommez le gant ScalingGlove. Placez le gant au milieu de l'espace libre et tournez-le de manière à ce qu'il soit tourné vers le haut.
Configuration du gant de frappe. Le gant change d'échelle pour créer un ascenseur permettant d'élever les joueurs.
Sélectionnez votre animateur d'accessoire dans l'organiseur, et ajoutez un élément de matrice à ScalingProps pour votre gant. Assignez à l'accessoire les valeurs suivantes :
| Option | Valeur | Explication |
|---|---|---|
| ScaleTargets | {1.0, 2.0, 1.0}, {1.0, 1.0, 1.0} | Cet accessoire s'agrandira jusqu'à deux fois ses dimensions sur l'axe Y, puis reviendra à ses dimensions initiales. Notez que, puisque l'accessoire a pivoté, l'axe Y représente maintenant le "haut" local de l'accessoire. |
| RootProp | Assigner à l'accessoire que vous animez. | Il s'agit de l'accessoire que vous animez. |
Appliquez vos modifications, puis extrayez vos accessoires ! Essayez de varier les différentes échelles pour obtenir des dimensions différentes, et essayez de mettre à l'échelle d'autres accessoires pour créer des scénarios différents !
Étape suivante
Dans la section suivante, vous combinez le mouvement, la rotation et l'échelle pour créer des accessoires capables de réaliser ces trois opérations !
%animating-prop-movement-6-combining-movement-rotation-and-scale-in-verse:topic%
Code complet
Voici le code complet généré dans cette section :
scaling_prop.verse
using { /Fortnite.com/Devices }
using { /Fortnite.com/Devices/CreativeAnimation }
using { /Verse.org/Simulation } }
using { /UnrealEngine.com/Temporary/SpatialMath }
MatchScaleTargetTip<localizes>:message = "La position facultative vers laquelle se déplacer dans l'espace du monde. Utilisez-la si vous ne souhaitez pas définir de MoveTarget."
# Un accessoire qui s'adapte à une échelle donnée ou à l'échelle d'un accessoire en mode Créatif.
scaling_prop<public> := class<concrete>(movable_prop):
# La matrice de cibles vector3 pour le changement d'échelle du RootProp.
@editable {ToolTip := MoveTargetsTip}
var ScaleTargets:[]vector3= array{}
# L'accessoire facultatif en mode Créatif dont l'échelle doit correspondre à celle du RootProp.
@editable {ToolTip := MatchScaleTargetTip}
var MatchScaleTarget:?creative_prop = false
# L'échelle que l'accessoire cherche à atteindre.
var TargetScale:vector3 = vector3{}
# Changer l'échelle du RootProp en fonction de ScaleTarget ou de MatchScaleTarget s'il y en a une.
Move<override>()<suspends>:void=
# Définir TargetScale sur MatchScaleTarget si elle est définie.
if:
ScaleToMatch := MatchScaleTarget?.GetTransform().Scale
then:
set TargetScale = ScaleToMatch
# Appeler MoveToEase pour commencer la mise à l'échelle de l'accessoire. Le mode d'animation OneShot joue l'animation une seule fois.
RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot)
else:
# Sinon, le changement d'échelle se fait pour chaque cible de la matrice ScaleTargets.
for:
ScaleTarget:ScaleTargets
do:
set TargetScale = ScaleTarget
# Appeler MoveToEase pour commencer la mise à l'échelle de l'accessoire. Le mode d'animation OneShot joue l'animation une seule fois.
RootProp.MoveToEase(MoveDuration, TargetScale, MoveEaseType, animation_mode.OneShot)
prop_animator.verse
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation } }
using { /UnrealEngine.com/Temporary/Diagnostics }
TranslatingPropsTip<localizes>:message = "Les accessoires qui se déplacent grâce à l'animation."
RotatingPropsTip<localizes>:message = "Les accessoires qui tournent grâce à l'animation".
ScalingPropsTip<localizes>:message = "Les accessoires qui changent d'échelle grâce à l'animation".
# Coordonne le déplacement des accessoires grâce à l'animation en appelant la méthode Setup() de chaque accessoire.
prop_animator := class(creative_device):
# Matrice de movable_props qui se déplacent grâce à l'animation.
@editable {ToolTip := TranslatingPropsTip}
TranslatingProps:[]translating_prop = array{}
# Matrice de movable_props qui tournent grâce à l'animation.
@editable {ToolTip := RotatingPropsTip}
RotatingProps:[]rotating_prop = array{}
# Matrice de movable_props qui changent d'échelle grâce à l'animation.
@editable {ToolTip := ScalingPropsTip}
ScalingProps:[]scaling_prop = array{}
# S'exécute à l'activation de l'appareil dans une partie en cours.
OnBegin<override>()<suspends>:void=
# Pour chaque accessoire, appeler Setup() pour commencer l'animation.
for:
Prop:TranslatingProps
do:
Prop.Setup()
for:
Prop:RotatingProps
do:
Prop.Setup()
for:
Prop:ScalingProps
do:
Prop.Setup()