Préface
Cet article vous apprend à utiliser les courbes de Bézier pour générer un effet spécial de vol.
Préparation pour la mi-parcours
Ouvrir certaines variables pouvant être configurées pour la planification
startPos = flyEffect.transform.position;
var right = (GetAimPoistion(targetActor) - flyEffect.transform.position).x > 0?1:-1;
midPos = startPos + new Vector3(right*Mathf.Tan((angle*Mathf.PI)/180)*height,height,0);
public int angle = 45;//向上角度
public int height = 2;//飞行上浮高度
Une courbe de Bézier cubique est un outil mathématique qui peut être utilisé pour décrire une courbe lisse déterminée par quatre points de contrôle : un point de départ, un point d'arrivée et deux points intermédiaires. Le point de départ et le point final sont les points finaux de la courbe, tandis que le point médian est utilisé pour ajuster la forme et la direction de la courbe. Plus le point médian est proche du point de départ ou d'arrivée, plus la courbe est proche d'une ligne droite ; plus le point médian est éloigné du point de départ ou d'arrivée, plus la courbe est courbée.
Dans ce code, midPos est un point intermédiaire utilisé pour contrôler la trajectoire de mouvement de l'objet dans l'effet de vol. Pour que l'objet vole le long d'une parabole, midPos doit remplir les conditions suivantes :
• La coordonnée x de midPos doit différer de la coordonnée x de startPos d'une valeur fixe, qui est déterminée par la droite, l'angle et la hauteur. . right est un nombre entier indiquant la direction dans laquelle l'objet vole. S'il s'agit d'un nombre positif, cela signifie voler vers la droite ; s'il s'agit d'un nombre négatif, cela signifie voler vers la gauche. L'angle est un angle qui représente l'angle de vol initial de l'objet. La hauteur est une hauteur qui représente le point le plus élevé du vol d'un objet. Ces trois variables peuvent être ajustées dans l'éditeur pour modifier l'effet du vol de l'objet.
• La coordonnée y de midPos doit être égale à la coordonnée y de startPos plus la hauteur, afin que l'objet puisse voler jusqu'au point le plus élevé.
• La coordonnée z de midPos doit être égale à la coordonnée z de startPos, afin que l'objet puisse voler sur le même plan.
Formule de calcul spécifique
Décoller
if (triggered && !!flyEffect)
{
removeEffect(_action);
return;
}
float t = _localTime / costTime;
t = Mathf.Clamp(t, 0, 1);
if(t >= 1)
triggered = true;
var targetPos = GetAimPoistion(targetActor);
flyEffect.transform.position = (1 - t) * (1 - t) * startPos + 2 *t* (1 - t) * midPos + t * t * targetPos;
• Tout d'abord, il vérifie les valeurs d'une variable booléenne déclenchée et d'une variable objet flyEffect. Si déclenché est vrai et que flyEffect n'est pas vide, alors il appelle une fonction removeEffect pour supprimer l'effet de vol et termine l'exécution de ce code.
• Ensuite, il calcule une variable à virgule flottante t, qui représente la progression du mouvement de l'objet de l'effet de vol. Sa valeur est l'heure actuelle _localTime divisée par le temps total costTime, puis utilise la fonction Mathf.Clamp pour la limiter entre 0 et 1 .
• Ensuite, il détermine si t est supérieur ou égal à 1. Si tel est le cas, il définit le déclenchement sur vrai, indiquant que l'effet de vol est terminé.
• Enfin, il appelle une fonction GetAimPosition pour obtenir la position de l'objet cible targetActor et l'affecter à une variable vectorielle targetPos. Ensuite, il utilise une formule de courbe de Bézier cubique pour calculer la position actuelle de l'objet à effet de vol et l'attribue à flyEffect.transform.position. Cette formule utilise la position de départ startPos, la position intermédiaire midPos et la position cible targetPos comme points de contrôle, et t comme paramètre.
Qu'est-ce qu'ObjectTemplate ?
ObjectTemplate est un modèle permettant de créer des objets au moment de l'exécution. Il peut définir les propriétés et les méthodes d'un objet, ainsi que la relation entre l'objet et d'autres objets. En fait, il est utilisé pour stocker la poignée des effets spéciaux, puis enregistrer les effets spéciaux sous GO et s'envoler.