1. Wiki
  2. /Particules
  3. /Composants de particule

Composants de particule

Tous les composants de particule de Minecraft Bedrock expliqués : vitesse et rotation de départ, mouvement, collision, apparence en billboard, couleur, éclairage et durée de vie.

Les composants de particule décrivent chaque particule individuelle : comment elle démarre, comment elle bouge, à quoi elle ressemble et quand elle disparaît. Ils se trouvent dans le bloc components d'un fichier de particule, à côté des composants d'émetteur qui les font apparaître.

Tu débutes avec les particules ? Ta première particule construit une étincelle de rubis à partir de zéro et utilise la plupart de ces composants.

Ce dont chaque particule a besoin

En pratique, chaque effet a besoin de particle_lifetime_expression (sinon les particules ne disparaissent jamais) et de particle_appearance_billboard (sinon il n'y a rien à voir). Tout le reste est facultatif et peut être combiné librement.

Les champs numériques acceptent un simple nombre ou une chaîne Molang. À l'intérieur, tu peux utiliser variable.particle_age, variable.particle_lifetime et variable.particle_random_1 à _4 pour donner à chaque particule sa propre personnalité.

État initial

Ces composants sont appliqués une seule fois, à la naissance de la particule.

ComposantCe qu'il faitChamps clés
minecraft:particle_initial_speedLa vitesse à laquelle la particule commence à bougerUn nombre (blocs par seconde, dans la direction donnée par la forme de l'émetteur), ou une vitesse [x, y, z]
minecraft:particle_initial_spinL'angle de départ de l'image et sa vitesse de rotationrotation : degrés (0 par défaut). rotation_rate : degrés par seconde (0 par défaut)
minecraft:particle_initializationExécute ton propre Molang pour chaque particule, pour définir des variables lues par d'autres champsper_update_expression : s'exécute à chaque mise à jour. per_render_expression : s'exécute à chaque fois qu'elle est dessinée

La vitesse

Dans components
"minecraft:particle_initial_speed": "math.random(1, 2)"

Avec un seul nombre, la particule vole dans la direction que lui a donnée la forme de l'émetteur. Avec trois nombres, tu définis toi-même la vélocité, par exemple [0, 2, 0] pour monter tout droit. Sans ce composant, les particules démarrent immobiles.

La rotation

Dans components
"minecraft:particle_initial_spin": {
  "rotation": "math.random(0, 360)",
  "rotation_rate": "math.random(-90, 90)"
}

La rotation fait tourner l'image plate autour de son centre, comme une roue. Un angle de départ aléatoire est le moyen le plus simple d'éviter qu'une foule de particules ait l'air d'une série de copies.

Tes propres variables

Dans components
"minecraft:particle_initialization": {
  "per_render_expression": "variable.twinkle = math.sin(variable.particle_age * 720) * 0.5 + 0.5;"
}

Maintenant, variable.twinkle oscille entre 0 et 1 deux fois par seconde, et tu peux t'en servir pour la taille ou la couleur. Pour une valeur qui suit une forme sur toute la durée de vie, une courbe est souvent plus simple.

Mouvement

Ces composants font bouger la particule à chaque image, après sa naissance.

ComposantCe qu'il faitChamps clés
minecraft:particle_motion_dynamicUn vrai mouvement avec des forces : gravité, vent, résistance de l'air, accélération de la rotationlinear_acceleration, linear_drag_coefficient, rotation_acceleration, rotation_drag_coefficient
minecraft:particle_motion_parametricTu définis la position exacte à chaque image avec du Molang, sans tenir compte des forcesrelative_position, direction, rotation
minecraft:particle_motion_collisionPermet aux particules de toucher les blocs : rebondir, glisser, s'arrêter ou disparaîtreenabled, collision_radius, coefficient_of_restitution, collision_drag, expire_on_contact, events

Dynamique

Dans components
"minecraft:particle_motion_dynamic": {
  "linear_acceleration": [0, -9.8, 0],
  "linear_drag_coefficient": 0.5,
  "rotation_acceleration": 0,
  "rotation_drag_coefficient": 0
}
ChampCe qu'il fait
linear_accelerationUne poussée chaque seconde, sous la forme [x, y, z] en blocs par seconde par seconde. [0, -9.8, 0] donne une impression de chute. Un y positif fait monter la particule comme de la fumée
linear_drag_coefficientLa résistance de l'air. Plus la particule va vite, plus elle ralentit fort. 0 veut dire aucune résistance
rotation_accelerationAccélère la rotation (ou la ralentit avec une valeur négative), en degrés par seconde par seconde
rotation_drag_coefficientRalentit la rotation, pour qu'une particule qui tourne finisse par se stabiliser

Le mouvement dynamique agit sur la vitesse de la particule, il se combine donc avec particle_initial_speed : démarre vite, puis laisse la gravité et la résistance prendre le relais.

Paramétrique

Dans components
"minecraft:particle_motion_parametric": {
  "relative_position": [
    "math.cos(variable.particle_age * 360) * 0.8",
    "variable.particle_age",
    "math.sin(variable.particle_age * 360) * 0.8"
  ]
}

Ici, tu laisses tomber la physique et tu dis simplement où se trouve la particule, par rapport à l'émetteur. Cet exemple fait un tour par seconde tout en montant d'un bloc par seconde : une spirale de rubis. direction et rotation se définissent de la même façon.

Le paramétrique a besoin d'un émetteur normal

Le mouvement paramétrique ne fonctionne pas pour les particules créées par emitter_rate_manual. Pour les effets attachés à une créature, il ne fonctionne que si l'émetteur utilise l'espace local pour sa position.

Collision

Dans components
"minecraft:particle_motion_collision": {
  "collision_radius": 0.1,
  "coefficient_of_restitution": 0.4,
  "collision_drag": 2,
  "events": { "event": "pop", "min_speed": 2 }
}

Sans ce composant, les particules traversent les blocs.

ChampCe qu'il fait
enabledActive ou désactive la collision. Peut être du Molang, vérifié à chaque image. Activé par défaut
collision_radiusLa taille de la particule pour toucher les blocs. Doit être d'un demi-bloc ou moins. Fais-la correspondre à peu près à la taille du billboard
coefficient_of_restitutionLe rebond. 0 s'arrête net, 1 rebondit à la même hauteur, entre les deux la particule perd un peu de hauteur à chaque rebond
collision_dragRalentit la particule tant qu'elle touche une surface, en blocs par seconde. Elle glisse jusqu'à s'arrêter
expire_on_contacttrue supprime la particule dès qu'elle touche un bloc. Idéal pour des gouttes de pluie
eventsDéclenche l'un de tes événements quand elle touche quelque chose, par exemple une éclaboussure. Un objet événement ou une liste. min_speed (au moins 2 blocs par seconde) ignore les contacts légers

La collision coûte en performances

Vérifier les blocs pour chaque particule demande du travail au jeu. N'ajoute la collision que là où la différence se voit, et garde un max_particles bas pour ces effets.

Apparence

Ces composants décident de l'apparence de la particule à l'écran.

ComposantCe qu'il faitChamps clés
minecraft:particle_appearance_billboardDessine la particule comme une image plate et décide de sa taille, de son orientation et de la partie de la texture qu'elle montresize, facing_camera_mode, direction, uv
minecraft:particle_appearance_tintingColore l'image, avec une seule couleur ou un dégradé dans le tempscolor
minecraft:particle_appearance_lightingRend la particule plus sombre dans les endroits sombres et plus claire à la lumière, comme les blocsaucun : écris {}

Billboard

Dans components
"minecraft:particle_appearance_billboard": {
  "size": [0.1, 0.1],
  "facing_camera_mode": "lookat_xyz",
  "uv": {
    "texture_width": 32,
    "texture_height": 8,
    "uv": [0, 0],
    "uv_size": [8, 8]
  }
}

size vaut [width, height] et est vérifié à chaque image, donc du Molang ici peut faire grandir ou rétrécir la particule. Chaque valeur se mesure depuis le centre, donc 0.5 donne un carré d'un bloc de large.

facing_camera_mode décide de l'orientation de l'image plate :

ModeL'image
lookat_xyzFait toujours face à la caméra, mais reste droite. Le choix habituel
rotate_xyzReste à plat contre l'écran et tourne avec la caméra
lookat_y / rotate_yFait face à la caméra mais ne tourne que vers la gauche et la droite, comme une silhouette en carton posée au sol
lookat_directionFait face à la caméra tout en s'alignant sur la direction de la particule. Idéal pour des traînées
direction_x / direction_y / direction_zOriente le côté x, le côté y ou la face de l'image selon la direction de la particule
emitter_transform_xy / _xz / _yzReste à plat dans un plan de l'émetteur. _xz crée un décalque plat sur le sol

Les modes de direction ont besoin de savoir dans quelle direction pointe la particule. Définis-la avec direction :

Dans minecraft:particle_appearance_billboard
"direction": {
  "mode": "derive_from_velocity",
  "min_speed_threshold": 0.01
}

derive_from_velocity utilise le sens de déplacement de la particule, mais seulement tant qu'elle va plus vite que min_speed_threshold. Utilise "mode": "custom_direction" avec "custom_direction": [x, y, z] pour la définir toi-même.

uv choisit la partie de la texture à afficher. texture_width et texture_height sont la taille de ton PNG en pixels, puis uv est le coin supérieur gauche et uv_size la largeur et la hauteur de la partie voulue. L'exemple ci-dessus affiche la première image de 8x8 d'une bande de 32x8.

Animation en flipbook

Place plusieurs images côte à côte et le billboard peut les jouer comme un folioscope. Remplace uv et uv_size par flipbook :

Dans le bloc uv
"uv": {
  "texture_width": 32,
  "texture_height": 8,
  "flipbook": {
    "base_UV": [0, 0],
    "size_UV": [8, 8],
    "step_UV": [8, 0],
    "max_frame": 4,
    "stretch_to_lifetime": true,
    "loop": false
  }
}
ChampCe qu'il fait
base_UVLe coin supérieur gauche de la première image
size_UVLa largeur et la hauteur d'une image
step_UVDe combien se décaler pour l'image suivante. [8, 0] avance vers la droite
max_frameLe nombre d'images (la première est l'image 1)
frames_per_secondLa vitesse de lecture
stretch_to_lifetimetrue ignore la vitesse et joue toutes les images exactement une fois sur la durée de vie de la particule
looptrue recommence à la première image après la dernière

Une étincelle de rubis en 4 images qui s'ouvre, brille et se referme paraît bien plus vivante qu'une seule image.

Teinte

Dans components
"minecraft:particle_appearance_tinting": {
  "color": [1, 0.15, 0.3, 1]
}

La couleur multiplie la texture, alors dessine tes textures de particules en blanc ou en gris et laisse la teinte ajouter la couleur. Tu peux écrire une couleur de plusieurs façons :

FormeExemple
[r, g, b] ou [r, g, b, a], chacun de 0 à 1[1, 0.15, 0.3, 1]
"#RRGGBB""#FF2650"
"#AARRGGBB" (alpha en premier)"#80FF2650" est à moitié transparent
Du Molang dans chaque case["variable.tint.r", "variable.tint.g", "variable.tint.b", 1]

Pour changer de couleur dans le temps, utilise un dégradé. Les couleurs sont réparties uniformément, et interpolant indique où se trouve la particule sur le dégradé à cet instant :

Dans components
"minecraft:particle_appearance_tinting": {
  "color": {
    "gradient": {
      "0.0": "#FFFFFFFF",
      "0.3": "#FFFF2650",
      "1.0": "#00600018"
    },
    "interpolant": "variable.particle_age / variable.particle_lifetime"
  }
}

Écrite sous forme d'objet comme ici, chaque couleur se place au point que tu indiques. Une simple liste les répartit plutôt uniformément de 0 à 1. Cette étincelle clignote en blanc, devient rouge rubis assez tôt, puis s'efface lentement.

L'alpha a besoin du bon matériau

Les couleurs semi-transparentes ne s'affichent qu'avec le matériau particles_blend ou particles_add. Avec particles_alpha, un pixel est soit entièrement affiché, soit entièrement caché.

Éclairage

Dans components
"minecraft:particle_appearance_lighting": {}

Avec ce composant, les particules paraissent plus sombres dans les grottes et la nuit, pour bien s'intégrer au monde. Ne le mets pas pour ce qui doit briller dans le noir : la magie, le feu, notre étincelle de rubis.

Durée de vie

Ces composants décident du moment où une particule disparaît.

ComposantCe qu'il faitChamps clés
minecraft:particle_lifetime_expressionLa durée de vie principale : un temps fixe, ou un test Molang vérifié à chaque imagemax_lifetime, expiration_expression
minecraft:particle_lifetime_eventsDéclenche tes événements à certains moments de la vie de chaque particulecreation_event, expiration_event, timeline
minecraft:particle_kill_planeSupprime les particules qui traversent une surface plate invisible[A, B, C, D]
minecraft:particle_expire_if_in_blocksSupprime les particules qui se trouvent dans l'un des blocs listésUne liste de noms de blocs
minecraft:particle_expire_if_not_in_blocksSupprime les particules qui sortent des blocs listésUne liste de noms de blocs

Expression de durée de vie

Dans components
"minecraft:particle_lifetime_expression": {
  "max_lifetime": "math.random(0.8, 1.5)"
}
  • max_lifetime est la durée de vie en secondes, choisie une fois à la naissance de la particule.
  • expiration_expression est vérifiée à chaque image. Quand elle ne vaut pas 0, la particule disparaît. Par exemple, "variable.particle_age > 1 && query.is_in_water" pourrait la faire disparaître plus tôt.

Tu peux utiliser les deux ensemble : la particule disparaît dès que l'une des deux conditions est remplie.

Événements de durée de vie

Dans components
"minecraft:particle_lifetime_events": {
  "creation_event": "flash",
  "expiration_event": "pop",
  "timeline": {
    "0.25": "twinkle"
  }
}

Les noms renvoient au bloc events du même fichier, et chaque champ accepte un nom ou une liste. Contrairement à la version de l'émetteur, ils se déclenchent pour chaque particule, donc une salve de 12 étincelles déclenche pop 12 fois. Voir les événements pour savoir ce qu'un événement peut faire.

Plan de suppression

Dans components
"minecraft:particle_kill_plane": [0, 1, 0, 0.5]

Les quatre nombres décrivent une surface plate à la façon des maths : tous les points où A*x + B*y + C*z + D = 0, mesurés depuis l'émetteur mais alignés sur le monde. Les particules qui la traversent disparaissent. [0, 1, 0, 0.5] est un sol situé un demi-bloc sous l'émetteur. C'est un moyen peu coûteux d'arrêter des particules qui tombent, sans collision.

Dans des blocs et hors des blocs

Dans components
"minecraft:particle_expire_if_not_in_blocks": [
  "minecraft:water",
  "minecraft:flowing_water",
  "minecraft:bubble_column"
]

C'est comme ça que les bulles éclatent en atteignant la surface : elles ne vivent que tant qu'elles sont dans l'eau. Utilise particle_expire_if_in_blocks pour l'inverse, par exemple de la poussière qui disparaît dès qu'elle dérive dans l'eau. Les deux fonctionnent avec particle_lifetime_expression.

Une particule complète

Les quatre groupes réunis. Voici le côté particule d'un éclat de rubis qui tombe, rebondit et s'efface :

RP/particles/ruby_shard.json (dans components)
"minecraft:particle_initial_speed": "math.random(2, 3)",
"minecraft:particle_initial_spin": {
  "rotation": "math.random(0, 360)",
  "rotation_rate": 180
},
"minecraft:particle_motion_dynamic": {
  "linear_acceleration": [0, -9.8, 0],
  "rotation_drag_coefficient": 1
},
"minecraft:particle_motion_collision": {
  "collision_radius": 0.05,
  "coefficient_of_restitution": 0.3,
  "collision_drag": 4
},
"minecraft:particle_appearance_billboard": {
  "size": [0.06, 0.06],
  "facing_camera_mode": "lookat_xyz",
  "uv": {
    "texture_width": 8,
    "texture_height": 8,
    "uv": [0, 0],
    "uv_size": [8, 8]
  }
},
"minecraft:particle_appearance_tinting": {
  "color": "#FFE0204A"
},
"minecraft:particle_appearance_lighting": {},
"minecraft:particle_lifetime_expression": {
  "max_lifetime": 2
}

Donne-lui un émetteur tiré des Composants d'émetteur, par exemple une salve de 8 depuis une petite sphère, et tu obtiens un super effet de bloc qui se casse.

We use cookies to improve your experience and analyse site traffic. Learn more