アドオン詳細解説 - パーティクル
目次 (折りたたみ可)
パーティクルとは
言葉で説明するのは難しいのですが、以下の画像のような粒子エフェクトをパーティクルと呼びます。

ファイルの場所
リソースパックのparticlesフォルダにファイルを置きます。
リソース
┣ manifest.json
┣ pack_icon.png
┗ particles
┗〇〇.json
パーティクルの仕組み
パーティクルをカスタムするうえで、そもそもパーティクルはどのようにして現れるか知っておきましょう。この記事ではこの説明が前提になっています。
ブロックを壊したりコマンドで発生させた「パーティクル」は「エミッター」と呼ばれる目に見えない"領域"(点とは限らない)からスポーンします。
イメージとして、手持ち花火の先端に点の形をしたエミッターがあって、火花のパーティクルがそこからスポーンする感じです。
もう一つの例として、鍋でお湯を沸かすときに、水面に面の形をしたエミッターがあって、その面からまんべんなく泡のパーティクルがスポーンするといった感じです。
基本の構造
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "ex:my_particle",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particle/particles"
}
},
"components": {
// コンポーネント
"minecraft:particle_appearance_billboard": {
"size": [ 1, 1 ],
"facing_camera_mode": "lookat_xyz",
"uv": {
"texture_width": 128,
"texture_height": 128,
"uv": [ 0, 0 ],
"uv_size": [ 8, 8 ]
}
}
}
}
}
コンポーネントの選び方
カスタムブロックやカスタムアイテムは、必要なコンポーネントを好きなように"皿にとっていく"ことができますが、 パーティクルは必ず選ばないといけないコンポーネントがいくつかあり、さらにそれはあるカテゴリから選択する方式になっています。
ようは"主食"を必ず選ばないといけなくて、パンかごはんを選べるみたいなイメージです。
実際に最低限必要なコンポーネントは、
- エミッター・レート系から1つ
- エミッター・ライフタイム系から1つ
- エミッター・形状系から1つ
- パーティクル・ライフタイム系から1つ
- minecraft:particle_appearance_billboardコンポーネント
です。
エミッター・レート系
この系列では、エミッターからどれくらいのペースでパーティクルがスポーンするかを指定します。方法によって複数のコンポーネントがあります。
コンポーネント名 | 簡単な説明 |
---|---|
minecraft:emitter_rate_instant | 1回限り |
minecraft:emitter_rate_steady | エミッターのライフタイムがある限り |
※ minecraft:emitter_rate_manualを使うのは非推奨
エミッター・ライフタイム系
ライフタイムとは"寿命"のことです。エミッターの寿命を決めるコンポーネントが方法によって複数あります。
コンポーネント名 | 簡単な説明 |
---|---|
minecraft:emitter_lifetime_expression | MolangによりON/OFFできる |
minecraft:emitter_lifetime_looping | ループする |
minecraft:emitter_lifetime_once | 1回限り |
エミッター・形状系
エミッターの形状を決めます。
コンポーネント名 | 簡単な説明 |
---|---|
minecraft:emitter_shape_disc | 円盤 |
minecraft:emitter_shape_box | 直方体 |
minecraft:emitter_shape_custom | 特殊(有向パーティクル用) |
minecraft:emitter_shape_entity_aabb | エンティティのコリジョンボックス |
minecraft:emitter_shape_point | 点 |
minecraft:emitter_shape_sphere | 球 |
パーティクル・ライフタイム系
パーティクルの寿命を決めます。方法によって複数のコンポーネントがあります。
コンポーネント名 | 簡単な説明 |
---|---|
minecraft:particle_expire_if_in_blocks | 指定したブロックに埋まると消える |
minecraft:particle_expire_if_not_in_blocks | 指定したブロックから出ると消える |
minecraft:particle_lifetime_expression | MolangでON/OFFできる |
minecraft:particle_kill_plane | パーティクルが消える平面を指定する |
ツールで作る
コンポーネントの選び方が複雑だったりするので、どうしてもパーティクルを作るのは難しいです。そこで、それを少し簡単にするために「
使い方についてはまたいつか書きます。
詳細な構造
イベントやカーブを定義してより複雑なパーティクルを作ることができます。
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "ex:my_particle",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particle/particles"
}
},
"curves": {
// カーブ
},
"components": {
// コンポーネント
},
"events": {
// イベント
}
}
}
イベントの定義
基本の書式
"events": {
"(イベント名)": {
// イベントファンクション
}
}
1つのイベントに直接定義できるイベントファンクションは1つまでです。
イベントファンクション
名前 | 簡単な説明 |
---|---|
"particle_effect" | パーティクルを発生させます。 |
"sound_effect" | 効果音を発生させます。 |
"expression" | Molang式を処理します。 |
"log" | コンテンツログを出力します。 |
"sequence" | 複数のイベントファンクションを動作させます。 |
"randomize" | 指定したものの中からランダムにイベントファンクションを動作させます。 |
例(別のパーティクルをランダムに発生させる)
"ex_event": {
"randomize": [
{
"weight": 25,
"particle_effect": {
"effect": "ex:my_particle2",
"type": "emitter"
}
},
{
"weight": 75,
"sequence": [
{
"particle_effect": {
"effect": "ex:my_particle2",
"type": "emitter"
}
},
{
"particle_effect": {
"effect": "ex:my_particle3",
"type": "emitter"
}
}
]
}
]
}
カーブ
パーティクルをデザインするにあたって、大きさや色合いの変化は重要です。 多くの場合「だんだん変化する」ときは「線形」的な変化をします。 細かいこだわりがなければそれで十分ですが、カーブという機能を使って「初めは"変化"を遅く、終わりへ向かうにつれて"変化"を速くしていく」 というような複雑な「変化」を実装することができます。

JSONの構造
"curves": {
"molangvar": {
"type": "linear",
"nodes": [ 0.0, 1.0, -1.0, 2.0 ],
"input": 1.0,
"horizontal_range": 3.0
}
}