VFXクラスを使うと簡易的なエフェクトを表示することができます。
多くのエフェクトは、画像を張り付けたポリゴンを大量に表示し、それぞれのサイズや向き、動きを変化させることで表現します。
このポリゴンひとつひとつを「パーティクル」といいます。
パーティクルは「エミッター」で制御します。
エミッターは、パーティクルを出す位置やタイミングなどを管理するものです。
ホースから水を出してることを想像してください。
水がパーティクルで、ホースがエミッターです。
エフェクトを出したいタイミングでEmitterData構造体を要し、Startメソッドを呼ぶ。
#include "Engine/VFX.h"
EmitterData data;
VFX::Start(data); //エミッターを設置
あとはEmitterData構造体の各メンバに任意の値を入れることで、いろいろなエフェクトにすることができる。
各メンバの説明は次の通り。
std::string型。
パーティクルに貼る画像ファイル名。
省略した場合は「defaultParticle.png」が読み込まれる。
XMFLOAT3型。
エミッターの位置(パーティクルの発生位置)。
デフォルトは原点。
XMFLOAT3型。
パーティクルの発生位置の誤差。
例えばpositionのXが5で、誤差のXを3にした場合、2~8(5±3)のどこかからパーティクルが発生する。
XMFLOAT3型。
パーティクルを移動させる向き。
デフォルトは上向き(0,1,0)。
XMFLOAT3型。
パーティクルを移動させる向きの誤差。
デフォルトは(0,0,0)。
X,Y,Z軸それぞれの角度を指定する。
例えば10にすれば±10°
float型。
パーティクルの移動速度。
1フレームでどのくらい動くか。
デフォルトは0.1。
float型。
速度のばらつきを0~1で指定する。
0だとばらつき無し、1だと指定した速度の0倍~2倍。
デフォルトは0。
float型。
パーティクルの加速度。
移動速度に毎フレームこの値を掛ける。
デフォルトは1.0。
DWORD(unsigned int)型。
何フレームおきにパーティクルを発生させるか。
デフォルト値は10。
この値を0にするとエミッターを作成した瞬間に1度だけパーティクルが出る。(エミッターは自動的に消える)
DWORD(unsigned int)型。
1度にパーティクルを何個出すか。
デフォルト値は1。
float型。
重力。
デフォルト値は0。
DWORD(unsigned int)型。
パーティクルが生まれてから消えるまでのフレーム数。
デフォルト値は30。
XMFLOAT4型。
パーティクルの色を設定。
メンバ変数のx,y,z,wをそれぞれR,G,B,αとして使用し、0~1であらわす。
デフォルトは(1,1,1,1)。
XMFLOAT4型。
色の変化量。
メンバ変数のx,y,z,wをそれぞれR,G,B,αとして使用し、1フレームごとの変化量を指定する。
デフォルトは(0,0,0,0)。
XMFLOAT3型。
パーティクルの向きで、各軸ごとの角度を指定する。
回転は、Z軸→X軸→Y軸の順で計算される。
ビルボードの場合はZ軸だけ使う
デフォルトは(0,0,0)。
XMFLOAT3型。
パーティクルの向きのばらつき。
たとえば「45」を指定したら±45度の範囲でランダムになる。
デフォルトは(0,0,0)。
XMFLOAT3型。
パーティクルの1フレームごとの回転角度。
デフォルトは(0,0,0)。
XMFLOAT2型。
パーティクルの幅と高さを指定する。
デフォルトは(1,1)。
XMFLOAT2型。
パーティクルサイズのばらつき。
デフォルトは(0,0)。
XMFLOAT2型。
1フレームごとのパーティクルサイズの拡大率。
デフォルトは(1,1)。
bool型。
trueの場合、常にカメラの方を向くパーティクルになる。
falseの場合、デフォルトでは-Z方向を向くパーティクルになる。
デフォルトはtrue。
Start関数の戻り値がエミッターの番号になるので、End関数にその番号を渡せばエミッターが削除されます。
int hEmit;
hEmit = VFX::Start(data);
VFX::End(hEmit);