ParticleEmitterは、カスタマイズ可能な2D画像(パーティクル)を世界に発生させるオブジェクトで、火、煙、火花などの特殊効果をシミュレートするのに役立ちます。
パーティクルエミッターの作成
ParticleEmitterをAttachmentまたはBasePartクラスのオブジェクトに親子関係を持たせることができます。BasePartに親子関係を持たせると、パーティクルはパートのバウンディングボックスまたは形状内にランダムに生成されます。Attachmentに親子関係を持たせると、パーティクルはアタッチメントの位置から発生します。
さらに、EmissionDirectionプロパティは、エミッターがBasePartに親子関係を持つときの発生面(Enum.NormalId)を決定します。このプロパティを変更すると、パーティクルの発生方向も変更されます。
パートまたはアタッチメントにパーティクルエミッターを作成するには:
Explorerウィンドウで、パートまたはアタッチメントにカーソルを合わせ、⊕ボタンをクリックします。コンテキストメニューが表示されます。
メニューからParticleEmitterを挿入します。パーティクルエミッターは、パートの領域内またはアタッチメントの位置からすぐにパーティクルを発生させます。

パーティクルのカスタマイズ
以下のプロパティを試すことで、パーティクルの視覚的な外観をカスタマイズし、噴火する火山、魔法の粉、塵のモートなどのユニークなゲームプレイ要素を作成できます。
テクスチャ
Textureプロパティは、各パーティクルが表示する画像をレンダリングします。デフォルトでは、パーティクルエミッターは白いスパークルテクスチャのパーティクルを持っていますが、興味深い効果を得るために任意のテクスチャに変更できます。
パーティクルテクスチャとして使用する画像を作成する場合は、透明な背景を持つ.png形式を使用するのが最適です。テクスチャがグレースケールでアルファチャンネルがない場合は、パーティクルエミッターのLightEmissionプロパティを1に設定して、暗い領域を隠すことを試みてください。
パーティクルエミッターに画像を挿入するには:
StudioのWindowメニューまたはHomeタブツールバーからToolboxを開きます。
以前にインポートした画像を挿入したい場合は、Inventoryタブをクリックします。他のクリエイターから画像を挿入したい場合は、Creator Storeタブをクリックします。


挿入したい画像を右クリックし、Copy Asset IDを選択します。
Explorerウィンドウで、ParticleEmitterを選択します。
Propertiesウィンドウで、アセットIDをTextureプロパティに貼り付けます。
色
Colorプロパティは、各パーティクルのテクスチャに特定の色合いを付けるか、またはそのライフタイムにわたってグラデーションColorSequenceを適用します。
Explorerウィンドウで、ParticleEmitterを選択します。
Propertiesウィンドウで、Colorプロパティを選択します。次のいずれかを行います:
- 色の四角をクリックしてColorsポップアップウィンドウを開き、色を選択します。
- RGBカラーバリューのフィールドに3つの数字を入力します。


異なる色のパーティクルを持つ類似のパーティクルエミッター
サイズ
Sizeプロパティは、各パーティクルのサイズを一定のサイズに設定するか、またはそのライフタイムにわたってNumberSequenceに設定します。
- Explorerウィンドウで、ParticleEmitterを選択します。
- Propertiesウィンドウで、Sizeプロパティを選択します。
- 各パーティクルのサイズとして希望するサイズを入力します。
透明度
Transparencyプロパティは、各パーティクルの不透明度を一定の値として設定するか、またはそのライフタイムにわたってNumberSequenceの不透明度として設定します。不透明度は0(完全に不透明)から1(完全に透明)までの範囲です。特定の不透明度または数値シーケンスにパーティクルを設定する方法の詳細については、Sizeのカスタマイズプロセスに従って、エミッターのTransparencyプロパティフィールドを使用してください。
ライフタイム
Lifetimeプロパティは、パーティクルのライフタイムを秒単位で設定します。このプロパティは、一定の値として設定するか、各パーティクルのランダムなライフタイムが選択される最小および最大の範囲を提供することができます。
速度
Speedプロパティは、新しいパーティクルが発生する速度のランダム範囲(最小から最大)を決定し、スタッド毎秒で測定されます。各パーティクルの速度は発生時に選択され、EmissionDirectionに適用されます。負の値はパーティクルが逆方向に移動する原因となります。
Speedを変更しても、アクティブなパーティクルには影響を与えず、既に持っている速度を保持します。ただし、Acceleration、Drag、およびVelocityInheritanceを使用して、アクティブなパーティクルの速度に影響を与えることができます。
レート
Rateプロパティは、1秒あたりに発生するパーティクルの数を設定します。単一のパーティクルエミッターは、1秒あたり最大400パーティクルを生成できます(モバイルでは1秒あたり100パーティクル)。最良のパフォーマンスを得るために、パーティクルレートをできるだけ低く保ち、希望する視覚効果を得るためにサイズや他のプロパティを試してください。
向き
Orientationプロパティは、エミッターのパーティクルジオメトリに使用する向きモードを決定します。
| 向き | パーティクルの動作 |
|---|---|
| FacingCamera | 標準のカメラ向きのビルボードクワッド;デフォルトの動作。 |
| FacingCameraWorldUp | カメラを向いているが、垂直の上向きのワールドY軸のみに回転します。 |
| VelocityParallel | 移動方向に平行に整列します。 |
| VelocityPerpendicular | 移動方向に垂直に整列します。 |
LightEmission
LightEmissionプロパティは、パーティクルのTextureの色とその背後の色のブレンドを決定します。値が0の場合は通常のブレンドモードを使用し、値が1の場合は加算ブレンドを使用します。高い値は、低照度の環境でもパーティクルを光らせることができます。
SpreadAngle
SpreadAngleプロパティにはXとYの値があり、パーティクルが発生できる角度の範囲を決定します。この範囲は、軸の両側から計算されます。たとえば、値が(45, 0)の場合、パーティクルはEmissionDirectionに対してX軸の0°から45°の範囲で発生します。
WindAffectsDrag
ゲームでグローバル風を有効にしている場合、エミッターのWindAffectsDragプロパティが有効で、Dragプロパティが0より大きい限り、パーティクルはグローバル風ベクトルに従います。

形状
Shapeプロパティは、パーティクルエミッターの形状をボックス、球、円柱、または円盤のいずれかに設定します。




パーティクルエミッターの形状を選択した後は、ShapeStyle、ShapeInOut、およびShapePartialプロパティを試して、パーティクルの発生をさらにカスタマイズできます。
ShapeStyle
ShapeStyleプロパティは、発生タイプを次のいずれかに設定します:
- ボリューム — パーティクルは形状内のどこでも発生します。
- 表面 — パーティクルは形状の外側からのみ発生します。


ShapeInOut
ShapeInOutプロパティは、発生を次のように設定します:
- 内向き — パーティクルは形状に向かって発生します。
- 外向き — パーティクルは形状から離れて発生します。
- 内外 — パーティクルはランダムに内向きと外向きの両方の動作をします。
ShapePartial
ShapePartialプロパティは、円柱、円盤、および球の形状をさらに修正するために使用できるファクターです。
円柱の場合、ShapePartialは、EmissionDirectionの側の円柱の半径を乗算します。


スクワッシュ
Squashプロパティは、パーティクルの非均一なスケーリングを許可し、ライフタイムにわたって曲線で制御されます。0より大きい値は、パーティクルを水平方向に縮小し、垂直方向に成長させます。一方、0より小さい値は、パーティクルを水平方向に成長させ、垂直方向に縮小させます。定数またはNumberSequenceとしてスクワッシュ量を設定する方法の詳細については、Sizeのカスタマイズプロセスに従って、エミッターのSquashプロパティフィールドを使用してください。
スクワッシュは特に雨に役立ちます。パーティクルを伸ばすことで、そのテクスチャがはるかに認識しにくくなるため、デフォルトのスパークルテクスチャでも落ちる雨滴として通用します。詳細については、雨をシミュレートするを参照してください。
フリップブック
パーティクルフリップブックテクスチャを使用すると、パーティクルのテクスチャをライフタイムにわたってアニメーション化できます。
フリップブックテクスチャは、2×2、4×4、8×8、またはカスタムのフレームレイアウトを持つことができます。たとえば、次の1024×1024の画像は8×8のレイアウトを持っているため、64フレームのアニメーションに適しています。

エミッターのTextureプロパティに有効なフリップブックテクスチャを指定したら、FlipbookLayoutプロパティがテクスチャのレイアウトを決定します。これは、Enum.ParticleFlipbookLayout列挙型の任意の値にすることができます:
- None — フリップブック機能を無効にし、パーティクルのライフタイムにわたってテクスチャを単一の静的テクスチャとして使用します。
- Grid2x2 — 4フレームのアニメーション用の2×2フレーム。
- Grid4x4 — 16フレームのアニメーション用の4×4フレーム。
- Grid8x8 — 64フレームのアニメーション用の8×8フレーム。
フリップブックの動作をさらにカスタマイズするには、次のプロパティを調整できます:
FlipbookFramerateプロパティは、フリップブックテクスチャが1秒あたり何フレームでアニメーションするかを決定します。Lifetimeと同様に、フリップブックのフレームレートをランダム化するために最小および最大の範囲を設定できます。最大は1秒あたり30フレームです。
その他のプロパティ
パーティクルをさらにカスタマイズするには、次のエミッタプロパティを考慮し、詳細についてはParticleEmitterリファレンスページをクリックしてください。
以下の外観プロパティは、色、光の発生、向き、サイズ、テクスチャ、透明度、スクワッシュ、およびフリップブックに加えて追加されます。
| プロパティ | 説明 |
|---|---|
| LightInfluence | 環境光が個々のパーティクルの色にどの程度影響を与えるかを決定します。 |
| Brightness | LightInfluenceが0のときにエミッターから発生する光のスケールを設定します。 |
| ZOffset | パーティクルの前後のレンダリング位置をスタッド単位で決定し、画面上のサイズを変更せずに行います。これにより、複数のエミッターを重ねたり、親オブジェクトの前または後ろにパーティクルをレンダリングしたりできます。 |
雨をシミュレートする
すべての雨滴をシミュレートすることは実用的ではありませんが、パーティクルエミッターを使用すると、3D世界で雨の説得力のある錯覚を作成できます:
雨が降るエリアの上にPartを挿入します。固定し、Transparencyを1に設定し、CanCollideを無効にします。
パートにParticleEmitterを挿入し、そのEmissionDirectionをBottomに設定します。
雨の角度をつけるには、小さな回転を設定するか、WindAffectsDragを有効にしてパーティクルがグローバル風に従うようにします。ドラッグは風を適用するだけでなく落下を遅くするため、雨が速く降るようにするには、下向きの加速度を増やす必要があるかもしれません。
単一のエミッターは1秒あたり限られた数のパーティクルを生成できます(レートを参照)。したがって、より重い雨や広いエリアには、多くのパートとエミッターが必要です。希望するエリアの上にグリッド状に配置します。
雨が地面に着地する様子を示すには、EmissionDirectionがTopのエミッターを持つ透明なパートを地面に配置します。スプラッシュパーティクルは落下する雨のように伸びないため、通常はカスタムテクスチャと、各スプラッシュが消散するように見える透明度シーケンスが必要です。スプラッシュは、慎重に配置した表面でのみ正しく見えます。手動で配置できない場合は、低い霧がはるかに許容されます。
パーティクル制限の管理
広いエリアを覆う雨はすぐにパーティクル制限に達し、モバイルデバイスはデスクトップよりもはるかに低い制限を持っています。遠くでパーティクルがちらつく場合は、一度に画面上に表示される数を減らしてください:
- エミッターパートを空中で低く配置し、ライフタイムをそれに合わせて短くします。
- レートを減らして、豪雨を軽いシャワーに変えます。
- より少ないエミッターパートで小さなエリアを覆います。
雨の例
- 手作りの例については、The Mystery of Duvall Driveを参照してください。これは、雨、霧、スプラッシュ、屋根から滴る水のためにエミッターを使用しています。
- スクリプト例については、weather-islandプロジェクトを参照してください。これは、嵐をスケジュールし、雲と風を遷移させ、雨と霧のエミッターを生成し、屋根の検出を行います。