ロケット花火の煙から、魚が吐き出す泡まで、Minecraft: Bedrock Edition 内でコンテンツに特殊効果を追加する方法としては、パーティクルがお勧めです。
このチュートリアルでは、次の内容を学びます。
- Minecraft: Bedrock Edition でカスタム パーティクル効果を作成する方法。
- 新しいパーティクル効果を作成してマップやアドオンで使用する方法。
要件
本チュートリアルを開始する前に、以下を完了しておくことをお勧めします。
はじめに
パーティクルのユースケース
パーティクルはマップやアドオンのビジュアル体験を拡張する強力なツールです。 エンティティで使用して、排気煙のような環境効果、魔法の呪文のような攻撃、その他のアニメーションを実現できます。 パーティクルは、落ちてくる葉っぱのような環境効果をマップ内で実現するために使用することもできます。 また、簡単な 2D グラフィックを世界に配置するためにパーティクルを使用することもできます。 さらに、パーティクルは完全にクライアント側でシミュレートされるため、通常、カスタム エンティティよりもパフォーマンスに優れています。
名前付けと場所
Bedrock では、パーティクル効果にカスタム JSON 形式を使用します。 ファイルは、リソース パックの particles
フォルダーに保存されます。 モデルやエンティティと同様にパーティクルは識別子で参照されるため、このファイルは particles
フォルダー内の任意のサブフォルダーに保存でき、参照についての心配は不要です。
パーティクルの識別子は、JSON ファイルの先頭で指定します。 エンティティの場合とまったく同様に、識別子は名前空間と名前から構成されます (例: compass:colored_smoke
)。
"description": {
"identifier": "compass:colored_smoke",
},
単位
パーティクル効果の値はすべて、単位としてメートル (ブロック) と秒を使用します。 速度は、秒当たりのメートル数 (m/s) で表され、加速は秒当たりの速度 (m/s²) で表されます。 回転では、回転関数と三角関数の両方に角度を使用します。
Snowstorm
このガイドでは、Snowstorm を使用してパーティクル効果を作成します。 Snowstorm は Web アプリまたは VSCode の拡張機能として使用できます。 Snowstorm を使用すると、パラメーターを変更しながらパーティクル効果をライブでプレビューできます。 ビギナーには Web アプリが便利な場合もありますが、多数のパーティクル効果が含まれているプロジェクトに取り組む場合は、VSCode 拡張機能を使用した方がワークフローが高速になります。
インターフェイス
Snowstorm を開くと、メニューの下に 3D プレビュー セクション、サイドバー、メニュー バー、式バーが表示されます。
サイドバーには、パーティクルを構成するさまざまなパラメーターと設定がすべて一覧表示されます。 フィールドの多くは Molang をサポートしています。 つまり、静的な数値を入力できるだけでなく、より細かく値を制御する必要がある場合に Molang 言語を使用して数式を使用することもできます。 各フィールドをポイントすると、その設定の説明が表示されます。
非常に複雑な Molang 式になる場合は、メニューのすぐ下の式バーで編集することもできます。
メニュー バーでは、Web アプリへのファイルのインポート/エクスポート、サンプルの読み込み、リファレンスの確認を行うことができます。
式バーの下には、プレビュー画面があります。 マウスの左右のボタンやマウス ホイールを使用して 3D 空間を移動できます。また、下のボタンを使用してプレビューを開始/一時停止できます。 右下隅には、シーンに存在するパーティクルの現在の数と FPS が表示されます。
インポートとエクスポート
Web アプリを使用している場合は、[File (ファイル)] メニューを介してファイルをインポートおよびエクスポートする必要があります。 また、右上隅にある [Code (コード)] タブに切り替えることで、生成されたファイルをプレビューできます。
カスタム テクスチャを使用している場合は、サイドバーの [Texture (テクスチャ)] セクションで個別に読み込む必要があります。
VSCode 拡張機能を使用している場合は、particles フォルダーに <name>.particle.json
という名前の新しいファイルを作成すると、VSCode によって自動的に Snowstorm エディターでそのファイルが開かれます。 また、右上隅にある [Open Code (コードを開く)] をクリックして、生成されたコードを新しいタブでプレビューすることもできます。さらに、ここでコードを直接編集することもできます。
パーティクル効果の作成
このガイドでは、順を追って色付きの煙効果を作成します。 まず、Snowstorm を開き、サイドバーで [Meta (メタ)] セクションを見つけます。 パーティクル効果の識別子を入力します。ここでは、compass:colored_smoke を使用します。
エミッタ
次に、エミッタを変更します。 エミッタはパーティクル効果の中心となるものであり、パーティクルをスポーンさせる役割を担います。 まず、[Rate (レート)] セクションを開き、スポーンさせるパーティクルの数を定義します。 [Mode (モード)] の設定は [Steady (一定)] のままにします。これで、エミッタがパーティクルを絶え間なくスポーンさせるようになります。また、[Rate (レート)] は 30、[Maximum (最大)] は 100 に設定します。 これにより、エミッタが有効時間にわたって毎秒 30 パーティクルをスポーンさせるようになりますが、このエミッタからスポーンされたパーティクルは 100 を超えて世界に存在しないよう制限されます。
次に、エミッタの有効時間を定義します。 ここでは、このパーティクル効果を 1 度だけ再生しますが、持続的なエミッタが必要であればループするように設定することもできます。 また、[Active Time (有効時間)] は 2 に設定します。これにより、エミッタが 2 秒間パーティクルをスポーンさせるようになります。
デフォルトでは、パーティクルはエミッタの中心の一点からスポーンされます。 作成しているパーティクル効果ではこれで問題ないため、[Shape (形)] セクションに変更を加える必要はありません。
パーティクルのサイズ
次に、パーティクルの設定に移って、見た目の設定を構成します。 パーティクルはすべて、テクスチャが適用された 2D 平面です。 サイズの設定では、この平面の幅と高さの各値を半径で定義できます。 つまり、サイズを 1 x 1 に設定すると、2 x 2 の大きさのブロックになります。 この例では、0.25 x 0.25 を使用します。
パーティクルのモーションと物理特性
次の手順では、パーティクルの動き方を定義します。 [Motion (モーション)] セクションで、[Direction (方向)] モードを [Outwards (外向き)] のままにしておきます。 ポイント エミッタの場合、これでパーティクルが常に全方向に等しく拡がります。
パーティクルの初期方向が決まったところで、次にスピードを変更しましょう。 [Motion (モーション)] セクションで、[Speed (スピード)] を math.random(2, 4)
に設定します。 これは、2 から 4 までのランダムな 10 進数を常に出力する単純な数式です。 スピードはパーティクルがスポーンされるときに 1 回だけ計算されるので、各パーティクルの初速はランダムになります。
[Acceleration (加速)] では、スポーンされた後のパーティクルに作用する力を定義します。 たとえば、地球の重力をシミュレートするには、真ん中の値 (Y 軸) を -9.8
に設定します。 この煙では、上方向の動きが遅くなるように、0
、3
、0
を加速として使用します。
このままだと、加速によってパーティクルは急激に速くなります。 しばらく後にパーティクルを減速させて 1 つの空間に収まるようにするために、空気抵抗を追加します。 空気抵抗は、パーティクルが終端速度に達したときに加速を徐々に緩める濃い空気と考えることができます。 差し当たり、これは 2 に設定します。
空気抵抗に少し変化を加えるために、この値をランダム化しましょう。 空気抵抗式はフレームごとに 1 回評価されます。そのため、ランダム値は知らないうちに相殺されるので、このケースで数学ランダム関数を使用しても機能しません。 代わりに、組み込みの変数を使用します。 各パーティクルと各エミッタには、その有効時間中に変更されない 4 つのランダム変数が自動的に割り当てられます。 この変数には、0 から 1 までのランダムな数値が格納されます。 そのため、2 から 3 までのランダムな空気抵抗値を得るには、この値を 2 + variable.particle_random_1
に設定します。
パーティクルの有効時間
次に、パーティクルが世界に存在する時間を定義する必要があります。 ゆっくりとしたフェードアウト効果を実現するには、この数値もやはりランダム化します。 [Max Age (最大時間)] はパーティクルがスポーンされるときに 1 回だけ評価されるので、この効果を実現するには、この値を math.random(1, 3)
に設定します。
テクスチャ
パーティクルに独自のパーティクル テクスチャを作成して、リソース パックの textures フォルダーに保存することができます。 簡略化するために、この例ではデフォルトの Minecraft パーティクルであるスプライトを使用します。 このテクスチャを参照するには、[Texture (テクスチャ)] セクションのパス フィールドに「textures/particle/particles」と入力します。 デフォルトでテクスチャのバニラ バージョンが使用されるため、現在のテクスチャ パックに含まれていなくても、このテクスチャが自動的に読み込まれてゲームに表示されます。
ここで使用するパーティクル テクスチャは、最大の煙パーティクルです。 テクスチャが徐々に小さなサイズの煙パーティクルに変化するようにアニメーション化するので、[UV Mode (UV モード)] を [Animated (アニメーション化)] に設定します。
すべてのパーティクルのテクスチャが含まれるテクスチャ マップ全体の解像度は 128 x 128 ピクセルです。 スプライトの個々のピースのディメンションは、ほとんどが 8 x 8 ピクセルです。 ただし、これらの値は 2 倍に拡大します。 したがって、[Texture Size (テクスチャ サイズ)] は 16 x 16 ピクセルとなり、残りのオプションはこのサイズに基づきます。
最大の煙パーティクルの開始ピクセルは水平方向が 56 ピクセルで、2 倍の 112 に拡大されます。 このコンテキストではテクスチャは 16 x 16 なので、112 を 16 で割ると 7 となり、これが [UV Start (UV スタート)] フィールドの値となります。 あるいは、開始するテクスチャの前に表示されるテクスチャの数を数えることもできます (最大の煙パーティクルの前に表示されるテクスチャは 7 つです)。 ただし、空のスペースが広い場合、手動でテクスチャを数えるのは困難になることがあります。
アニメーションでは小さな煙テクスチャに変化するため、[UV Step (UV ステップ)] は -1 x 0 に設定します。 そうすることで、前のテクスチャに対して左水平方向に (テクスチャ サイズに基づき) 16 ピクセル分移動し、垂直方向には変化しません。 また、[Max Frame (最大フレーム)] を 7
に設定します。 8 つのテクスチャがあるのでアニメーションは 8 フレームとなり、最初のフレームは "フレーム 0" とカウントされるため、最後のフレームはフレーム 7 となります。
このケースでは、パーティクルの有効時間全体にわたってすべてのフレームを均等に拡大する必要があります。 したがって、[FPS (FPS)] フィールドを空のままにし、[Loop (ループ)] をオフにしますが、[Stretch To Lifetime (有効時間まで拡大)] をオンにします。 これで、稼働するアニメーション テクスチャが完成しました。
色
次に、パーティクルにランダムな色を適用します。 ベースのテクスチャは白なので、パーティクルに色付けをする出発点として適しています。
さまざまな色の範囲を使用し、各パーティクルにランダムな値を選択します。 まず、[Color & Light (色とライト)] セクションを開き、[Gradient (グラデーション)] モードを選択します。 ここでは、シンプルで美しいレインボーを構成しましょう。 + アイコンを使用して色ポイントを追加し、これをあちこち動かして各ポイントの色を変化させます。
デフォルトの色範囲は、0 と 1 の間です。 つまり、別の組み込みランダム変数の 1 つを使用するだけで、ランダムに色を選択できます。 [Interpolant (補間式)] フィールドに「variable.particle_random_2
」と入力します。 これで、各パーティクルがグラデーションからランダムな色でスポーンします。
Snowstorm の最終的な結果は次のようになります。
ゲームでのパーティクル効果の使用
ゲーム内でパーティクル効果を再生する方法は主に 3 つあります。
コマンド
これは最も簡単に効果をテストできる方法です。 /particle
コマンドを使用して、世界にパーティクル エミッタを呼び出します。
注意
パーティクル効果は完全にクライアント側で処理され、コマンドはサーバー側で実行されるため、サーバーではパーティクル効果が認識されません。 つまり、存在しないパーティクル効果の再生を試行した場合でもエラー メッセージは表示されません。
以下にコマンドの例を示します。コマンドの末尾にある 3 つのチルダは位置を示しています。このケースでは、コマンドが実行される正確な位置、つまりプレイヤーの足の位置またはコマンドが実行されるコマンドブロックの中心となります。
/particle compass:colored_smoke ~ ~ ~
アニメーション
パーティクルはエンティティのアニメーション内でも再生できます。 これは 2 ステップのプロセスです。 まず、クライアントのエンティティ ファイルにパーティクル効果をリンクし、これに短い名前を付けます。 こうすると、この短い名前をアニメーションで使用できます。
これをクライアント エンティティ ファイルの説明オブジェクト内に追加します。
"particle_effects": {
"smoke": "compass:colored_smoke"
}
パーティクル効果のキーフレームは、Blockbench のアニメーションに追加できます。 タイムラインの上にある [Animate Effects (アニメーション効果)] ボタンをクリックし、キーフレームを [Particle (パーティクル)] チャンネルに追加します。 次に、(クライアント エンティティ ファイルで定義した) 短い名前を、キーフレーム パネルの [Effect (効果)] に入力します。
また、ロケーターをエンティティ ファイルのパーティクル効果が現れる場所に指定することもできます。 さらに、[Script (スクリプト)] 入力に変数を割り当てて、後でパーティクル効果の内部で使用することもできます。
例:
variable.custom_size = 3.14;
アニメーション コントローラー
パーティクル効果はアニメーション コントローラーで再生することもできます。 これを行うには、まず、上述のようにパーティクル効果をクライアント エンティティ ファイルに追加します。 次に、下の例に示すように、1 つ以上のパーティクル効果をアニメーション コントローラーの特定の状態に追加します。
"particle_effects": [
{
"effect": "smoke"
}
]
次のステップ
お疲れさまです。記事の最後までやり通すことができましたね。 カスタム パーティクル効果の作成方法、エミッタの構成方法、物理特性の変更方法、アニメーション化されたテクスチャの使用方法、パーティクルの色付け方法についての学習は完了です。
パーティクル効果の作成では、さまざまな設定を組み合わせたり、Molang 式でパラメーターを活用したりして、試行錯誤を重ねる必要があります。 さらに深く学ぶ場合は、サンプル パーティクルと構成を詳しく調べて、値と式を変えることでさまざまな効果を作成する方法を身に付けることをお勧めします。 そして、一番大切なことは、あらゆるパラメーターでいろいろ再生してみて、どんな結果が出るかを楽しみながら確認することです。