車や他の多くの車両は、燃料を動力に変換するときに排気煙を排出します。Unity のビルトインのパーティクルシステムを使って車両に排気煙を追加することで、仕上げをより良くすることができます。
排気煙は排気管から非常に速く出ますが、大気と接触すると急速に減速します。速度が落ちるにつれ広がり、徐々に薄くなり最終的には空気中に放散します。排気ガスは高温であるため、周囲の冷たい空気を通過するときにわずかに上昇します。これらの要因により、現実的な効果を作成するために、排気煙のパーティクルはその生存期間にわたって以下の規則に従う必要があります。
まず、Shape を Cone (円錐) に設定し、Angle プロパティを 0 に設定します。これによって作成される “円錐” は、実際には円柱状のパイプです。
次に、Radius プロパティの値は、車両の排気管のサイズによって異なります。これが車両モデルの排気管と一致するかを確認する最も簡単な方法は、シーンビューで半径ギズモを使用することです。半径は、パーティクルサイズや放出率など、選択するプロパティ設定のかなり多くのことを決定します。この例では、車両は Unity の標準サイズの規則に従い、1 ワールド単位が 1 メートルに等しいと仮定しています。したがって、半径は約 0.05、つまり 5cm です。
煙の外観のために、Unity の Standard Assets パッケージには煙のパーティクルに適したグラフィックスが含まれています。これらをまだインストールしていない場合は、Standard Assets を参照してください。
このパッケージをインストールしたら、Renderer モジュールに移動し、Material プロパティを StandardAssets/ParticleSystems/Materials フォルダーの ParticleSmoke マテリアルの 1 つに設定します。濃い煙には ParticleSmokeBlack を使用し、薄い煙には ParticleSmokeWhite を使用します。
デフォルトの 5 秒の生存期間は、通常、自動車の排気ガスには長すぎます。この設定やその他の一般的なシミュレーションのためのプロパティを変更するには、メインモジュールを開きます。これは、ゲームオブジェクトと同じ名前のパーティクルシステムコンポーネントの上部にあるモジュールです。このモジュールで以下を行います。Start Lifetime を 2.5 秒に設定します。Simulation Space を World (ワールド) に設定します。ワールドシミュレーション空間を使用すると、車両が動いても煙の発生場所に煙をとどめておくことができます。Gravity Modifier を小さな負の値に設定します。この例では –0.1 を使用します。負の重力効果により、煙の粒子は高温ガスで構成されているかのように上昇します。最後に、Start Rotation の横にある小さなメニュー矢印をクリックし、Random Between Two Constants を選択します。2 つの値をそれぞれ 0* と 360 に設定します。これにより、煙のパーティクルが発生するときにランダムに回転します。多くのパーティクルが同じように整列していると、それは非常に目立ち、ランダムで形のない煙の軌跡の効果を損ないます。
この段階で、煙の粒子はリアルに見え始め、デフォルトの放出率は程よいエンジン音の効果を生み出します。次に、時間の経時的に消散する子押下を加えます。これを行うには、以下の通りです。Color Over Lifetime モジュールを有効にして開きます。Color プロパティのカラーピッカーをクリックします。Gradient Editor ウィンドウで、グラデーションの右側にある上部のストップをクリックし、アルファを 0 に設定します。上部のストップはアルファを制御し、下部のストップは色を制御します。これで、シーン内で煙のパーティクルがフェードアウトするのがわかります。エンジンの清潔度によって、始動時にグラデーションのアルファ値を減らしたい場合があります。濃くて黒い煙は、汚れた非効率的な燃焼を示唆する傾向があります。
フェードだけでなく、煙のサイズも大きくなります。これを行うには以下の通りです。Size Over Lifetime モジュールを有効にして開きます。Size カーブをクリックし、インスペクターの下部にあるカーブエディターで、左側のハンドルを垂直に動かして、パーティクルがフルサイズの何分の 1 かから始まるようにします。選択する正確なサイズは排気管のサイズによって異なりますが、パイプより少し大きい値にすると、いかにも排出ガスのように見えます。最後に、シーンビューでパーティクルシステムのシミュレーションを使用して、煙がどのように見えるかを視覚的に確認します。煙が十分に分散せず、目的の効果が得られない場合は、メインモジュールの開始サイズを変更することをお勧めします。
最後に、煙も分散するにつれて遅くする必要があります。これを行うには以下を行います。Force over Lifetime モジュールを有効にして開きます。Space を Local に設定します。外力の Z コンポーネントを負の値に設定して、外力がパーティクルを押し戻すように設定します (システムは、オブジェクトのローカル空間で正の Z 方向に沿ってパーティクルを放出します)。この例では、–0.75 の値を使用します。なぜなら、上記のように設定されたプロパティで非常にうまく機能するからです。
排気パーティクルシステムを配置した後、まず、それをメイン車両の子ゲームオブジェクトにします。これにより、パーティクルが車両とともに移動します。エフェクトを変更せずに再生するだけでよい単純なアプリケーションの場合は、Play On Awake と Looping プロパティを有効にします。ただし、車両の移動に伴い、放出率などのプロパティを変化させたい場合があります。エンジンがより強く回転するにつれてより多くの煙が生成されるため、排出率を変更すると、寄り本物らしく見せることができます。また、車両が動くときに煙のパーティクルが広がるのを防ぐのにも役立ちます。放出速度が低すぎる高速で動く車両は、はっきりとした煙の噴出を生成するように見えますが、これは非常に非現実的です。
放出率はスクリプトから簡単に変更することができます。エンジンの回転数か車両のスピードを表す変数がスクリプト内にあれば、その数値を定数と掛け合わせ、結果をパーティクルシステムの放出率のプロパティに代入します。
// C#
using UnityEngine;
using System.Collections;
public class PartScriptTestCS : MonoBehaviour {
public float engineRevs;
public float exhaustRate;
ParticleSystem exhaust;
void Start () {
exhaust = GetComponent<ParticleSystem>();
}
void Update () {
exhaust.emissionRate = engineRevs * exhaustRate;
}
}
基本的なスキームは排気煙のかなりリアルな様子を表現しますが、パーティクルシステムのプロパティを変更すると、エンジンの “性格” が変化することに気づくことでしょう。調整が不十分で効率の悪いエンジンは、燃料を不完全に燃焼させる傾向があり、その結果、重くて濃い煙が長時間空気中に残ります。これは古い農業用トラクターには最適ですが、高性能のスポーツカーには適していません。“クリーン” なエンジンの場合は、パーティクルの生存期間、不透明度、サイズの増加に小さな値を使用します。“汚れた” エンジンの場合はこれらの値を増やし、Emission モジュールの Bursts プロパティを使用して、エンジンがプスプスと排気ガスを発する様子を作成します。