サブエミッター機能【TRP_ParticleMZ】
MZ版で追加されたサブエミッター機能は1つ1つのパーティクルからさらに別のパーティクルを発生させる機能です。
単独のエミッターではできない幅広いパーティクル演出が可能となりますが、負荷を抑えつつ見栄えのする設定を作るのはなかなか難しく中~上級者向けの機能となります。
ここでは初級者でもサブエミッター機能の大まかな使い勝手がわかるように、さわりの部分を紹介していきます。
導入
「TRP_ParticleMZ_SubEmitter.js」プラグインをプロジェクトにインポートしてください。
sub setコマンド
パーティクル設定をplay/setコマンドで呼び出し直後に、サブエミッターの設定コマンドを実行することで設定ができます。
例)particle play explode_cp_4 this
particle sub set explode_cp_4 kira_blue_c
設定名・管理ID「explode_cp_4」のパーティクル設定を親エミッターとして再生した直後に、設定名「kira_blue_c」のサブエミッターをセットしています。
このとき、グループを活用してサブエミッターを設定
見栄えを調整するにはサブエミッター(ここでは「sub」)を同時に設定していく必要があるため、実践的には「グループ編集機能」を活用してサブエミッターの登録をしていく必要があります。
グループ機能の詳しい使い方はグループ機能【TRP_ParticleMZ】を参照。
ここではグループ設定名「groupTest」を再生・編集し、グループ内部で親となるエミッターと子となるサブエミッターを順に再生していきます。
「TRP_ParticleMZ_Group」のプラグインコマンドで管理ID「testGroup」として「_Editモード」をON/trueにしてイベントテストを実行してください。
(※MV形式コマンドは「particle group edit groupTest this」)
グループの編集
まずは親エミッターとして設定名「explode_cp_4」を再生させます。
command行に「set explode_cp_4 target
」と入力してEnterを押すと再生されます。
次に「alt(Macではopt)+↓キー」を押して下にコマンド行を追加し、サブエミッターの登録を行います。
サブエミッターをセットするコマンドは
「sub 親エミッターの管理ID サブエミッターの設定名
」
となりますが、ここでは簡易設定用のコマンド入力を行います。
「sub」と入力してEnterキーを押すと、自動的に「sub edit explode_cp_4 _sub:0 0 -1 0 0」とコマンドが補完入力され、サブエミッター設定の編集モードに入ります。
↓subと入力してEnter
(画像ではsub setとなってますが実際はsub editと補完され、すぐにパーティクル設定の編集画面が表示されます)
補足)自動補完される設定名について
管理ID「explode_cp_4」に対して設定名「_sub:0」のサブエミッターがセットされているのですが、「_sub:数字」の設定名は特例として内部では「_sub:数字:グループ管理ID/h」と変換されます。(ここでは「_sub:0:groupTest/h」)。
設定名の最後の「/h」は秘匿属性を追加するものであり、エディタで既存設定の読み込み時にカテゴリが分けられて表示されたり、TRP_ParticleMZ_List.jsの設定名一覧から省略されます。)
また、「sub」がサブエミッターの簡易追加コマンドであるのに対し、「edit」でEnterを押すと「edit _auto:0 target」と補完されます。
_subの形式同様に、内部では「_auto:数字:グループ管理ID/h」と変換されるので、グループ内でのみ使いたい(親)エミッター設定を追加したいときに便利でしょう。
サブエミッターのパラメータ
サブエミッター設定の編集画面には、通常のエミッター設定と異なり一番下に「sub」パラメータ行が追加されています。
サブエミッター独自の設定項目となりますが、ここではいちばん特徴的な「st」「et」について解説します。
stは「start timing/開始タイミング」、etは「end timing/終了タイミング」の略です。
主に0~1の数値を設定するのですが、stが0であれば親パーティクルの発生直後からサブエミッターの排出を有効化、1とすると親パーティクルが消滅する直前に有効となります。
(※etは-1の値で無効となり、通常のパーティクル設定のemitterLifetimeに従って排出を終えます。)
例えばプリセットの花火(fireworks)のパーティクルグループを見てみましょう。
親エミッター:打ち上げ時の火玉
(見やすいようにscaleを大きめに調整してます)1つ目のサブエミッター:親パーティクルの発生直後(st=0)から消滅の少し前(et=0.75)までの間に火玉の尾を発生させる
2つ目のサブエミッター:親パーティクルの消滅直前(st=1.0)に花火の爆発を発生
補足)subパラメータの設定について
stやetといったサブエミッターの設定パラメータは実際にはsubコマンドで設定します。
今回の例では「sub edit explode_cp_4 _sub:0 0 -1 0 0 0
」と自動入力された「0 -1 0 0 0」の部分にあたります。
エミッターの設定編集の「sub」項目でstやetといったパラメータを変更すると、グループエディタ上でのsubコマンドのパラメータが自動で変更されます。
グループ編集画面を介さない場合には、サブエミッター用の各種パラメータを手動入力で変更しなければならず、この点がサブエミッターの設定にグループ機能を活用する大きなメリットとなっています。
サブエミッターで遊んでみよう
サブエミッターを使って思い通りの演出を作るのはなかなか難しいですが、ここでは親エミッターとサブエミッターとしてそれぞれプリセットのデータを組み合わせて雰囲気を楽しんでみましょう。
まず、サブエミッター設定の編集中の場合は「cmd+E」で編集を終わらせてグループ編集画面に戻ります。
上キーを押して親エミッターの再生コマンドの行にカーソルを合わせ、「shift + alt(macの場合はopt) + Pキー」を入力します。
プリセットの設定一覧が呼び出されるので好みの設定を選びましょう。
選び終わったらescでピッカー終了します。
(ここではmonster_cを選んでます)
次に、サブエミッターの設定を行っているコマンドにカーソルを合わせます。
親エミッターの管理IDが変更されたため、サブエミッターの設定が無効化されています。
「shift+backspace」で一度コマンドをすべて削除し、再度「sub」と入力してEnterを押してサブエミッターを設定しましょう。
(*いちいちsubコマンドを生成し直すのが面倒な場合は、親エミッターの管理IDを例えばp1のように設定して設定名を別に指定するのも○)
今度は「ctrl(Macはcmd)+Pキー」でプリセット一覧を呼び出し、サブエミッターとして使用する設定を自由に読み込みましょう。
(ここではstatue_orb_cを選択してます)
親エミッター、サブエミッターにプリセットデータを読みこんで組み合わせ、subパラメータのst(開始タイミング)を調整するだけでもきっと面白い演出になるのではないでしょうか。
親エミッターのパーティクルに合わせて大きさ(scale)や色(color)も調整すると良い感じになりやすいです。
Tips
パーティクル数に注意
サブエミッターを使うとパーティクル1つ1つからたくさんのパーティクルを発生させ、見栄えはよくなるのですが表示されるパーティクル数が膨れ上がり、負荷も大きくなりがちです。
たくさんの親エミッターと子エミッターの射出パーティクル数がともに大きくならないように十分に注意しましょう。
サブエミッターの各種設定(中級者向け)
- st:startTiming/開始タイミング。0~1。
- et:endTiming/終了タイミング。0~1、または-1で無効。サブエミッターにemitterLifetime(エミッター寿命)が設定されている場合、etの終了タイミングかエミッター寿命の短い方が優先されます。
- spd:speedRate/慣性速度係数。1とすると親パーティクルの速度がそのまま慣性としてプラスされます。0~1で慣性の度合いを調整できます。(マイナスの値や1以上の数値も設定することは可能です)
- iAngle:inheritAngle/進行方向の継承。1とすることで、親パーティクルの進行方向が開始角(startRotation)の基準となります。iAngle=0の状態ではstartRotation=0とすると、親パーティクルの進行方向に関わらず子パーティクルは右方向に進みますが、iAngle=1とすると親パーティクルの進行方向に向かって子パーティクルが射出されます。
- iScale:inheritScaleMultiplier/拡大率乗数の継承。1とすると親パーティクルの拡大率乗数(scaleMultiplier)を継承します。親エミッターのたとえばminimumScaleMultiplierを0.1とするように、大小ランダムなパーティクルを発生させた場合に、iScale=1としておくと、大きな親パーティクルから発生する子パーティクルは大きく、小さな親パーティクルから発生する子パーティクルは小さくさせることができます。
最大数制限について
サブエミッターは負荷軽減のための「max」コマンドなどによる最大数制限が限定的にしか機能しないので注意が必要です。
発生数は「親エミッターの発生能力 x 子エミッターの発生能力の和」で計算。親エミッターと子エミッター、あるいは子エミッター同士で射出のタイミングがずれている場合には過大に評価されます。