このモジュールは、シーン で パーティクル が ゲームオブジェクト とどのように衝突するかを制御します。最初のドロップダウンを使用して衝突の設定を Planes か World のどちらに適用するかを定義します。World を選択する場合は、Collision Mode ドロップダウンを使用して衝突の設定を 2D または 3D ワールドのどちらに適用するかを定義します。
このモジュールは、Particle System コンポーネントの一部です。新しい Particle System ゲームオブジェクトを作成する場合、または終了したゲームオブジェクトに Particle System コンポーネントを追加する場合、Unity は Collision モジュールを Particle System に追加します。デフォルトでは、このモジュールは無効化されています。新規に Particle System を作成し、このモジュールを有効にするには、次のようにします。
このモジュールは Particle System コンポーネントの一部であるため、ParticleSystem クラスを通してアクセスします。ランタイムにアクセスし、値を変更する方法については、Collision モジュール API のドキュメント を参照してください。
このセクション内の一部のプロパティでは、異なるモードを使用して値の設定が行えます。使用可能なモードについての詳細は、Varying properties over time を参照してください。
プロパティ | 機能 |
---|---|
Planes popup | Planes モードを選択します。 |
Planes | 衝突平面を定義する拡張可能な Transform のリスト。 |
Visualization | 衝突平面の Gizmo をシーンビューでグリッド、ソリッドの何で表示するかのを選択します。 |
Scale Plane | Visualization で使用する平面のサイズ。 |
Dampen | 衝突の後、パーティクルを減速させるのに掛けられる少数の値。 |
Bounce | 衝突後に、表面から跳ね返るパーティクルに加わる力。 |
Lifetime Loss | 衝突後に失われるパーティクルの生存期間。 |
Min Kill Speed | 衝突後に、この値よりも遅い速度で移動しているパーティクルは削除されます。 |
Max Kill Speed | 衝突後に、この速度よりも速く移動するパーティクルは、システムから削除されます。 |
Radius Scale | パーティクル衝突スフィアの半径を調整します。これにより、パーティクルグラフィックスの視覚的なエッジをきれいに一致させることができます。 |
Send Collision Messages | この値を有効にすると、OnParticleCollision 関数を使用してスクリプトからパーティクルの衝突を検知することができます。 |
Visualize Bounds | シーンビュー上で、各パーティクルの衝突範囲をワイヤーフレームの形状で描画します。 |
このセクション内の一部のプロパティでは、異なるモードを使用して値の設定が行えます。使用可能なモードについての詳細は、Varying properties over time を参照してください。
プロパティ | 機能 |
---|---|
World popup | World モードを選択します。 |
Collision Mode | 3D か 2D を選択します。 |
Dampen | 衝突の後、パーティクルを減速させるのに掛けられる少数の値。 |
Bounce | 衝突後に、表面から跳ね返るパーティクルに加わる力。 |
Lifetime Loss | 衝突後に失われるパーティクルの生存期間。 |
Min Kill Speed | 衝突後に、この値よりも遅い速度で移動しているパーティクルは削除されます。 |
Max Kill Speed | 衝突後に、この速度よりも速く移動するパーティクルは、システムから削除されます。 |
Radius Scale | 3D か 2D を選択します。 |
Collision Quality | ドロップダウンを使ってパーティクルの衝突判定の質を設定します。これは、コライダーを通り抜けるパーティクルの数に影響します。質が低いと、パーティクルはコライダーをときどき通り抜けてしまいます。しかし、計算の負担は軽くなります。 |
High | Collision Quality を High に設定すると、衝突判定で常に物理演算システムが使用されます。これは、もっともリソースへの負担が高いですが、もっとも正確な結果が得られます。 |
Medium (Static Colliders) |
Collision Quality を Medium (Static Colliders) に設定すると、ボクセルのグリッドを使用して以前の衝突をキャッシュし、後のフレームで素早く再使用します。この方法に関しては、後述の World の衝突 を参照してください。 Medium と Low の違いは、各フレームで何回、パーティクルシステムが物理計算システムにクエリするかだけです。 Medium では、各フレームで Low よりも多くクエリを投げます。 この設定は、決して移動しない静的なコライダーにのみ適切です。 |
Low (Static Colliders) |
Collision Quality を Low (Static Colliders) に設定すると、ボクセルのグリッドを使用して以前の衝突をキャッシュし、後のフレームで素早く再使用します。この方法に関しては、後述の World の衝突 を参照してください。 Medium と Low の違いは、各フレームで何回、パーティクルシステムが物理計算システムにクエリするかだけです。 Medium では、各フレームで Low よりも多くクエリを投げます。 この設定は、決して移動しない静的なコライダーにのみ適しています。 |
Collides With | パーティクルは選択したレイヤーのオブジェクトにのみ衝突します。 |
Max Collision Shapes | パーティクル衝突判定に使用される衝突形状の数。超過した形状は無視され、Terrain (地形) が優先されます。 |
Enable Dynamic Colliders | キネマティックに設定されていないコライダーは動的コライダーです (コライダーの種類に関して詳しくは コライダー についてのドキュメントを参照してください)。 衝突時にパーティクルが反応するオブジェクトの中にこれらのコライダーの種類を配置する場合は、このオプションにチェックマークを入れます。このオプションのチェックマークを消去すると、パーティクルは静的コライダーに対する衝突にのみ反応します。 |
Voxel Size | ボクセルは、3 次元空間の標準グリッドの値を示します。Medium か Low 品質の衝突を使用するとき、Unity はグリッド構造で衝突をキャッシュします。この設定はグリッドサイズを制御します。グリッドサイズが小さい方がより正確ですが、メモリを多く消費し効率が落ちます。 ノート: Collision Quality を Medium か Low に設定しているときのみ、このプロパティが表示されます。 |
Collider Force | パーティクルの衝突後に物理コライダーに力を適用します。 パーティクルでコライダーを押すときに役立ちます。 |
Multiply by Collision Angle | コライダーに力を適用するとき、パーティクルとコライダーの間の衝突角度に基づいて力を拡大します。グレージング角は正面衝突よりも小さな力を生成します。 |
Multiply by Particle Speed | コライダーに力を適用するとき、パーティクルの速度に基づいて力を拡大します。高速で動くパーティクルは低速のものよりも大きな力を生成します。 |
Multiply by Particle Size | コライダーに力を適用するとき、パーティクルのサイズに基づいて力を拡大します。サイズの大きなパーティクルは小さいものよりも大きな力を生成します。 |
Send Collision Messages | これを有効にすると、OnParticleCollision 関数を使用してスクリプトからパーティクルの衝突を検知することができます。 |
Visualize Bounds | シーンビューで各パーティクルの衝突判定のスフィアをプレビューします。 |
パーティクルの周辺にオブジェクトが存在するとき、パーティクルがそれらのオブジェクトと相互作用するほうが、効果はより現実的に見えます。例えば水や破片などは、壁を簡単に通り抜けるよりも堅固な壁に阻まれるほうが現実的です。Collision モジュールを有効にすると、パーティクルはシーンのオブジェクトと衝突することができます。
パーティクルシステムを設定して、 World モードを選択すると、発生したパーティクルがシーン内のどのコライダーとも衝突するように設定することができます。また、 Collides With プロパティを使ってレイヤーごとにコライダーを無効にもできます。Planes モードオプションもあり、それによってコライダーを持つ必要がない平面のセットをシーンに加えることができます。このオプションは簡易な床、壁、それらと似たオブジェクトに利用でき、 World モードよりプロセッサーのオーバーヘッドを低くできます。
Planes モードが有効なとき、 Planes プロパティを通してトランスフォーム(一般的には空のゲームオブジェクト)のリストを加えることができます。平面は、オブジェクトのローカルの XZ 平面で、平面の法線ベクトルを示す Y 軸の正の方向に無限に拡張します。開発を補助するために、平面は、オブジェクト自体が可視のメッシュを持っているか否かに関係無く、ギズモとしてシーンに表示されます。ギズモはワイヤーフレームグリッド、ソリッドの平面オブジェクトとして表示され、大きさをスケールすることもできます。ただし、スケールは見た目にしか適用されません。つまり、衝突する平面自体はシーンを通して無限に広がっているのです。
衝突が有効なときパーティクルの大きさが問題になる場合もあります。表面と接触する際にグラフィックスを切り取られる可能性があるからです。この場合、停止するか跳ねる前にパーティクルは表面の半ばまで「沈んでいる」ように表示されます。Radius Scale プロパティはパーティクルのためにおおよその円状の半径を実際のサイズのパーセンテージで定義することで、この問題を解決します。このサイズ情報は、切り取り、沈み込み効果を防止するのに使われます。
Dampen と Bounce プロパティはパーティクルがソリッド (固形) のオブジェクトを表示するときに便利です。例えば、砂利を投げたとき固い表面では跳ね返りますが、雪玉のパーティクルは衝突の間、速度を失います。Lifetime Loss と Min Kill Speed を使うと、衝突の後に続く残りのパーティクルのエフェクトを削減することができます。例えば、火の玉は空中を飛んでいる間、数秒間は存在しているかもしれませんが、衝突の後は、ばらばらになった火のパーティクルはすぐに消えます。
Send Collision Messages が有効になっている場合、スクリプトからパーティクルコリジョンを検知することもできます。スクリプトは、パーティクルシステムが設定されたオブジェクト、コライダーが設定されたオブジェクト、またはその両方が設定されたオブジェクトにアタッチ可能です。衝突を検知することで、ゲームプレイで弾丸、魔法、パワーアップアイテムなどのアクティブなオブジェクトとしてパーティクルを使用することができます。より詳細な情報や例についてはスクリプトリファレンスの MonoBehaviour.OnParticleCollision ページを参照してください。
World Collision モジュールには Collision Quality プロパティがあり、High,Medium , Low に設定できます。 Collision Quality を Medium (Static Colliders) か Low (Static Colliders) に設定すると、衝突はボクセルのグリッド (3D グリッドの値) を使用し、後のフレームで素早く再使用するために前の衝突をキャッシュします。
このキャッシュは各ボクセルの平面からなり、平面はその位置の衝突表面を示します。各フレームで、 Unity はパーティクルの位置で平面のキャッシュを確認します。存在する場合は、 Unity はそれを衝突の検出に使用します。存在しない場合は、物理演算システムを使用します。衝突が返された場合は、後に続くフレームで素早く再使用するためにキャッシュに加えます。
これは、おおよその処理なので、衝突を見逃すこともあります。Voxel Size の値を低くしてこれを改善することができます。ただし、そうするとメモリが余分に消費されるので、効率が落ちます。
Medium と Low の違いは、各フレームでシステムが物理演算システムにクエリする回数だけです。Low では、Medium に比べ、フレームごとに少ない回数のクエリを行います。回数が上限に達すると、残りのパーティクルにはキャッシュだけを利用します。この結果、キャッシュがさらに包括的に増えるまで衝突を検知し損なうことが多くなります。
2017–05–30 修正されたページ
Collision モジュールは Unity 2017.1 で変更NewIn20171