アドオン詳細解説 - パーティクル

アップロード:2023/01/01 最終更新:2023/01/01

目次 (折りたたみ可)

パーティクルとは

言葉で説明するのは難しいのですが、以下の画像のような粒子エフェクトをパーティクルと呼びます。

ファイルの場所

リソースパックの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 ] } } } } }
{ "format_version": "1.10.0", "particle_effect": { "description": { "identifier": "ex:my_particle", "basic_render_parameters": { "material": "particles_alpha", "texture": "textures/particle/particles" } }, ~#B(f00)"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 ] } } }B#~ } }

コンポーネントの選び方

カスタムブロックやカスタムアイテムは、必要なコンポーネントを好きなように"皿にとっていく"ことができますが、 パーティクルは必ず選ばないといけないコンポーネントがいくつかあり、さらにそれはあるカテゴリから選択する方式になっています。

ようは"主食"を必ず選ばないといけなくて、パンかごはんを選べるみたいなイメージです。

実際に最低限必要なコンポーネントは、

です。

エミッター・レート系

この系列では、エミッターからどれくらいのペースでパーティクルがスポーンするかを指定します。方法によって複数のコンポーネントがあります。

コンポーネント名簡単な説明
minecraft:emitter_rate_instant1回限り
minecraft:emitter_rate_steadyエミッターのライフタイムがある限り

※ minecraft:emitter_rate_manualを使うのは非推奨

エミッター・ライフタイム系

ライフタイムとは"寿命"のことです。エミッターの寿命を決めるコンポーネントが方法によって複数あります。

コンポーネント名簡単な説明
minecraft:emitter_lifetime_expressionMolangによりON/OFFできる
minecraft:emitter_lifetime_loopingループする
minecraft:emitter_lifetime_once1回限り

エミッター・形状系

エミッターの形状を決めます。

コンポーネント名簡単な説明
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_expressionMolangでON/OFFできる
minecraft:particle_kill_planeパーティクルが消える平面を指定する

ツールで作る

コンポーネントの選び方が複雑だったりするので、どうしてもパーティクルを作るのは難しいです。そこで、それを少し簡単にするために「Snowstorm(スノーストーム)」というツールがあります。

 → Snowstorm

使い方についてはまたいつか書きます。

詳細な構造

イベントやカーブを定義してより複雑なパーティクルを作ることができます。

{ "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": { // イベント } } }
{ "format_version": "1.10.0", "particle_effect": { "description": { "identifier": "ex:my_particle", "basic_render_parameters": { "material": "particles_alpha", "texture": "textures/particle/particles" } }, ~#B(f00)"curves": { // カーブ },B#~ ~#B(f00)"components": { // コンポーネント },B#~ ~#B(f00)"events": { // イベント }B#~ } }

イベントの定義

基本の書式

"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" } } ] } ] }
"ex_event": { "randomize": [ ~#B(f00){ "weight": 25, "particle_effect": { "effect": "ex:my_particle2", "type": "emitter" } },B#~ ~#B(f00){ "weight": 75, "sequence": [ ~#B(00f){ "particle_effect": { "effect": "ex:my_particle2", "type": "emitter" } },B#~ ~#B(00f){ "particle_effect": { "effect": "ex:my_particle3", "type": "emitter" } }B#~ ] }B#~ ] }

カーブ

パーティクルをデザインするにあたって、大きさや色合いの変化は重要です。 多くの場合「だんだん変化する」ときは「線形」的な変化をします。 細かいこだわりがなければそれで十分ですが、カーブという機能を使って「初めは"変化"を遅く、終わりへ向かうにつれて"変化"を速くしていく」 というような複雑な「変化」を実装することができます。

JSONの構造

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