Collision モジュール
これらのモジュールは、パーティクルによるアクタコリジョンの処理方法を管理します。
コリジョン
エミッタにパーティクルのコリジョンを処理させるパラメータです。以下のメンバーが含まれます。
プロパティ | 説明 | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Collision | |||||||||||||||
Damping Factor | 衝突後にパーティクルを「遅延」させる度合いを表すベクター分布です。パーティクルのスポーン時に EmitterTime に基づいて値を取得し、パーティクルに格納します。 | ||||||||||||||
Damping Factor Rotation | 衝突後にパーティクルの回転を「遅延」させる度合い表すベクター分布です。パーティクルのスポーン時に EmitterTime に基づいて値を取得し、パーティクルに格納します。 | ||||||||||||||
Max Collisions | パーティクルで許容される最大衝突数を表す浮動小数点分布です。パーティクルのスポーン時に EmitterTime に基づいて値を取得します。 | ||||||||||||||
Collision Completion Option | パーティクルが MaxCollision 数に達した時の動作を表す enum 値です。以下の値のどれかになります:
|
||||||||||||||
Apply Physics | 衝突が発生したパーティクルとオブジェクト間に物理の適用を示すBoolean 値です。 現在は一方向です。パーティクルからオブジェクト パーティクルに物理は適用されていません。パーティクルが衝突するオブジェクトに適用する力積を生成するのみです。 |
||||||||||||||
Particle Mass | CollisionCompletionOption が true の場合、パーティクルの質量を表す浮動小数点分布です。パーティクルのスポーン時に EmitterTime に基づいて値を取得します。 | ||||||||||||||
Dir Scalar | 相互貫通または大きなギャップの回避に「役立つ」、パーティクルの範囲のスケーリングに使用する float 値です。 | ||||||||||||||
Pawns Do Not Decrement Count | true の場合、Pawns と衝突した時も反応を示しますが、MaxCollision 数の計算からは除外されます。これを使用すると、ポーンからパーティクルを跳ね返しても空中でフリーズすることはありません。 | ||||||||||||||
Only Vertical Normals Decrement Count | true の場合、垂直衝突の法線がない衝突にも反応しますが、MaxCollision 数の計算からは除外されます。これを使用すると壁からパーティクルを跳ね返し、床に静止させることが出来ます。 | ||||||||||||||
Vertical Fudge Factor | 垂直方向を決定する float 値です。正確な垂直線は Hit.Normal.Z == 1.0f になります。これにより、[1.0-VerticalFudgeFactor..1.0] の範囲にある Z コンポーネントを垂直コリジョンとして数えることが出来ます。 | ||||||||||||||
Delay Amount | 衝突のパーティクルをチェックする前に遅延させる時間です。値は EmitterTime を使用して取得します。パーティクル フラグの IgnoreCollisions は、更新中はパーティクルの RelativeTime が Delay Amount を超過するように設定されます。 | ||||||||||||||
Performance | |||||||||||||||
Drop Detail | true の場合、WorldInfo の Drop Detail プロパティも true であればモジュールは無視されます。 | ||||||||||||||
Collide Only if Visible | true の場合、コリジョンはパーティクル システムがレンダリングされている場合にのみ起こります。 | ||||||||||||||
Max Collision Distance | パーティクルのコリジョンが起こる最長距離です。 |
Collision モジュールは、2 つのベクター (UsedDampingFactor とUsedDampingFactorRotation) と整数 (UsedMaxCollisions) をパーティクルのペイロードデータへ加算します。これらの値は、パーティクルごとにコリジョン情報を追跡する際に使用します。
以下の疑似コードは、コリジョン パーティクルの更新プロセスを説明するものです。
Determine the location of the particle.This is required due to the fact
that the actual location isn't calculated until after the Update call.
Determine the appropriate extent to use during the line check.
if (SingleLineCheck indicates collision)
{
if (UsedMaxCollisions-- > 0) // Still collisions available
{
Adjust the velocity and rotation based on the collision
if (Applying physics)
{
Add an appropriate impulse to the hit object.
(The Mass is grabbed from the distribution relative to the
particle time.)
}
}
else
{
Out of collisions for this particle
Perform the appropriate action to take based on the CollisionCompletionOption
}
}
iOS モバイル デバイスのパーティクル コリジョン
iOS モバイル デバイス用の VFX のパーティクル コリジョン モジュールを使用する際には、Min Desired Frame Rate を 30 FPS 以下になるように調節しておかないと、パーティクル コリジョンがワールドのオブジェクトを衝突できない可能性が高くなります。 アンリアル エンジン (UE4) のフレーム レートが 30 FPS より低くなると、UE はパーティクル コリジョンを無効にしてフレーム レートを 30 FPS 以上に保とうとするためです。 デフォルトでは OS プロジェクトは 30 FPS にロックされています。つまり、パーティクル コリジョンは最初は無効になるように設計されているのです。 UE4 iOS プロジェクトでこの事象が起こらないようにするには、[Project Settings (プロジェクト設定)] > [General Settings (一般設定)] > [Framerate (フレームレート)] を開きます。
[Framerate] セクションを開いたら、[Min Desired Frame Rate] を 25 FPS といった 30 FPS 以下に設定します。 次に、パーティクル エフェクト コリジョン モジュールの [Performacne (パフォーマンス)] セクションの [Drop Detail (詳細を省く)] オプションのチェックを外します。

Min Desired Frame Rate を変更し、[Drop Detail (省略を省く)] のチェックを外したら、 プロジェクトを iOS モバイル デバイスに再クックまたは再デプロイするとパーティクル コリジョンが機能しているか確認します。