車や他の多くの車両は、燃料を動力に変換するときに排気煙を排出します。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 プロパティを使用して、エンジンがプスプスと排気ガスを発する様子を作成します。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.