[講座]『天候:メテオ』の作り方【TRP_ParticleMZ】
こんにちは。
GW真っ最中、いかがお過ごしでしょうか?
各所でGWセールが賑わっておりますが、シロップ印の各種プラグインも20%オフのセール中(~5/8<日>まで)です!
気になるプラグインがありましたら、ぜひショップページへお越しくださいませ!
さて、今回の記事ではRPGツクールMZ向けパーティクルプラグイン「TRP_ParticleMZ」を使って空からメテオが降ってくる天候エフェクトの制作方法をご紹介します!
上級者向けのグループエディタやサブエミッターを活用した高度なエフェクトとなります。
各種スタートアップ記事を読みこんで操作に慣れていないと難しい内容ですが、購入したばかりの方も「こんなエフェクトが作れるのか〜」と気軽に流し読みしてもらえると幸いです。
□スタートアップ記事
・ 導入とパーティクル表示【TRP_ParticleMZ】
・基本の使い方②〜エディタ編【TRP_Particle】
・グループ機能【TRP_ParticleMZ】
・サブエミッター機能【TRP_ParticleMZ】
天候「メテオ」の作り方
さて、新たにパーティクルエフェクトを自作しようとするとき、どのプラグインコマンドを使ってるいでしょうか?
「TRP_ParticleMZ」プラグインのset/playコマンドを使う方が多いかと思います。
ただ、ある程度プラグインの操作に慣れた方であれば、
「TRP_ParticleMZ_Group」プラグインのsetコマンドを使うのが断然おすすめです!
編集を始める際は、どんなエフェクトを作るかある程度想定しているでしょう。
しかし、いざエフェクトを作り進めていくと「見栄えをよくするために、もう1つエフェクトを重ねたい」と思うことが多々出てきます。
そんなときにグループコマンドのエディタであれば、テストプレイを続けながら複数のエミッターを交互に編集して見栄えを整えることができます。
エフェクトを作り始めるときは、おもむろにグループコマンドのsetを_EditMode=trueで呼び出しましょう!
今回は管理ID(設定名)「meteor」、対象を「weather」として天候エフェクトを制作していきます。
隕石本体の動きを作ろう
さて、グループエディタを呼び出して最初にすることは9割9分、決まってます。
「command1」の行にカーソルを合わせ、「edit」と打ち込んでEnterです
今回は、隕石本体をメインエミッターとして発生させ、複数のサブエミッターで細かな演出や動きを作っていきます。
- サブエミッター1:隕石の動きに合わせて「周りに燃える炎」
- サブエミッター2:「衝突後の炎」
- サブエミッター3:「衝突後の炎の煙」
では、隕石本体の動きを設定していきましょう!
隕石画像の読み込み
まずはパーティクルの画像を設定しましょう
今回はツクールMVのアニメーション画像「Earth3」の画像を使います。
「Ctrl+A」でMV形式のアニメーション画像をパーティクルとして読み込めるので、MVを所持してる方はぜひアニメーション画像をプロジェクトに取り込んでおきましょう!
ツクールMVの新規プロジェクトからimg/animationsフォルダをコピペすればOKです。
(※MVを持ってない人は任意の画像を用意して「img/particles」フォルダに入れましょう。「Ctrl+I」での画像選択時に表示されます。
ちょうどよい画像が無い方は、キャラ画像「!Others1」の岩の画像を切りとってひとまずの代用とすると良いでしょう。)
隕石の動きを設定
最終的には画面上のランダムな位置から複数発生させたいですが、まずは編集しやすいように隕石1つを定位置に発生させましょう。
□パラメータ設定例
- [blendMode]は0で通常
- [lifetime]は幅を持たせず4秒で固定。固定にすることで、消滅のタイミングに合わせてシェイクやSE再生といった演出をさせることができます。
「Ctrl+S」で保存→「Ctrl+W」でいったん隕石本体のエミッター設定を終わります。
隕石の周りの炎の設定
燃え盛る隕石を表現するためにサブエミッターを設定します。
「opt+↓」を押して「command1」の行の下にコマンドを追加し、
「sub」と打ち込んでEnterを押してサブエミッターを設定します。
炎のエフェクトとしてプリセットデータの「fire_c」をベースに編集していきます。
「Ctrl+P」でプリセット一覧から「fire_c」を選んで読み込みましょう。
読み込んだ数値のままだと少し問題があるので調整していきます。
位置の調整
まずは、炎が隕石のまわりにまとわるように発生位置を調整しましょう。
現在は長方形の範囲に発生させる「rect」となってます。
円形に発生させる「circle」に変更し、半径「r」をちょうどよい値に設定しましょう。(ここでは24)
発生量と見栄えの調整
次に、frequencyの値を大きくしてパーティクル発生量・負荷を抑えます。(ここでは0.01)
また、発生時の大きさを大きくし、量が減ってスカスカになった分の見栄えを補います。
方向の調整
炎が真上に立ち上がってますが、隕石の動きに合わせて[startRotation]を左上(-120度)に変更します。
□サブエミッター1のパラメータ
これで、1つ目のサブエミッターの設定完了です!
「Ctrl+S」→「Ctrl+W」でサブエミッターの設定を保存&終了します。
着弾後の炎と煙
次に、隕石の着弾後に残る炎のエフェクトを新しいサブエミッターとして設定していきます。
さきほどと同じように「Ctrl+↓」でCommand2の下に新しい行を挿入し、
「sub」と打ち込んでからEnterでサブエミッターの設定を行います。
着弾後の炎にもプリセットデータ「fire_c」をベースに使います。
「Ctrl+P」でプリセット一覧を表示して「fire_c」を選びます。
このままでは隕石の周りに炎が表示されているだけです。
隕石消滅後に表示されるようにサブエミッター設定の「sub」パラメータを調整します。
まず、開始タイミングを設定する「st」を1としてサブエミッターを有効化するタイミングを隕石消滅直後とします。
「emitterLifetime」が-1で永続のままではすぐに消滅する仕様なので、炎の表示時間を適当な秒数に設定します。
(※長すぎると隕石が降ってくるたびに炎が残って負荷が大きくなるので注意)
また、負荷を抑えるために「frequency」を少し大きめにして発生数を抑えましょう。
ついでにスカスカになった分、発生範囲rectの幅と高さを小さくして表示範囲を小さくすると良いでしょう。
□サブエミッター2のパラメータ
煙の設定
全く同じ手順で炎の煙をサブエミッターとして設定します。
プリセットデータで読み込むデータとして「smoke_c2」を使います。
読み込んだあとに、
- 「sub」パラメータの発生タイミング
- 「emitterLifetime」で炎の継続時間
- 「frequency」と「rect」で発生量と発生範囲
など調整しましょう。
□サブエミッター3のパラメータ
お疲れさまです!
これで、隕石エフェクトの基本設定が終わりました!
「Ctrl+S」→「Ctrl+W」でサブエミッターの設定を保存してから
もう1度「Ctrl+S」→「Ctrl+W」でグループの設定を保存して終了します。
(※グループ設定の保存を忘れずに!)
画面演出の設定
演出として隕石の着弾に合わせて「シェイク」「フラッシュ」「SE」を設定します。
パーティクルグループコマンドの「_editMode」をOFFにして、着弾タイミングの4秒(240フレーム)後にそれぞれのコマンドを実行させましょう。
3つのコマンド「シェイク」「フラッシュ」「SE」の好みの設定が見つかったら、パラメータをメモしておきましょう。
実は、上記の演出はパーティクルのグループコマンドからそれぞれ「shake」「flash」「se」コマンドとして実行させることができます。
(※グループコマンドに演出を組み込むことで、パーティクルグループコマンドを実行すれば、あとはタイミングを図らずに「シェイク」などを自動で行うことができます。)
再びグループsetコマンドの「_editMode」をONにしてテストプレイでグループエディタを開きます。
「Ctrl+↓」でコマンドを挿入して、
- 指定フレーム待機:「
wait フレーム数
」 - SEの再生:「
se SE名 ボリューム ピッチ パン
」 - フラッシュ:「
flash 赤 緑 青 強さ 所要時間
」 - 画面のシェイク:「
shake 強さ 速さ 所要時間
」
をそれぞれ設定しましょう。
(※残念ながら、グループエディタ画面ではフラッシュやシェイクの動作を確認できないので先程イベントコマンドで設定した値をそのまま使いましょう)
画面上にランダムに発生させる
さて、もろもろの下準備は終わりました。
画面上にランダムに隕石を発生させましょう!
まずは、隕石本体のエミッターを編集して発生位置を画面上のランダムなrectに設定しましょう。
[Command1]の行を選んで「Alt+E」で編集モードに入ります。
「screen」と打ち込むと発生位置が画面全体の範囲のrectに設定されます。
隕石を画面の上側から発生させ、着弾地点を画面内に収めるために微調整します。
いったん[emitterLifetime]を-1としてエミッター寿命を永遠にして[frequency]も調整し、画面上に大量に隕石を発生させます。(パソコンのスペックに注意)
この状態で[rect]の値を調整すると範囲を調整しやすいでしょう。
調整作業が終わったら、[emitterLifetime]と[frequency]をもとに戻してパーティクルが1つだけ発生させる状態に戻しましょう。
(※通常の天候エフェクトは[emitterLifetime]を-1として永続的に発生させればよいのですが、パーティクル発生ごとにSEや画面シェイクを合わせたいのでここでは1つのみ発生させます。逆に、割り切ってSEやシェイクをランダムなタイミングで発生させるのであればエミッターで永続的に発生させてOKです)
最後に、イベントコマンドで複数の隕石パーティクルの再生を管理させます。
イベントで隕石エフェクトを制御
ループコマンドを使って一定間隔で隕石を発生させます。
60フレームに1回の頻度で発生させます。
さて、このままでは隕石は画面上に1つしか表示されません。
パーティクルプラグインに使い慣れてきた方ならば原因は分かると思います。
「管理IDが同じエフェクトは1つしか表示できません。」
グループコマンドを呼び出すたびに管理IDを変える必要があります。
ここでは、変数を使って管理IDを制御してみましょう。
グループコマンドの管理IDとデータ名は次の通りです。
- 管理ID:meteor\V[変数番号]
- データ名:meteor
とします。管理IDには制御文字で変数の値を組み込んでおり、ループごとに「meteor1」「meteor2」と変わっていきます。
(※ver1.21にてグループコマンドの制御文字が反映されない不具合を修正しているのでアップデートをお願いします)
以上で「天候:メテオ」エフェクトが完成しました!
あとは、画面の色調を少し赤くすると雰囲気もそれっぽくなるでしょう。
今回のエフェクトはグループエディタを使ったものの中でも、かなり複雑なものです。
単体のエミッターよりも複雑でリッチなエフェクトを手軽に作れるので、ぜひグループエディタも活用してみてください!
そして、プラグインのセールもお忘れなく!
それでは!
おまけ:さらに調整
ランダムな間隔で発生させる
1秒(60フレーム)ごとに隕石を発生させてますが、シェイクやSEも1秒ごときっかりだと少し機械的な感じが強いです。
ループ間隔を1/3の20フレームに縮めて、その代わりに33%の確率でグループコマンドを実行させるように変更させます。
(※変数を使って乱数を生み出してもいいですが、マップイベントのリロード処理が走ってしまうため、ここでは条件分岐のスクリプトを使用しています。)
画面ループさせる
画面内が隕石で埋まっていても、上下左右にスクロールさせるとパーティクルが途切れます。
「loop」コマンドを使い、上下左右でパーティクルを使いまわしてループさせましょう。
光らせる
隕石の画像が少し浮いてしまうため、完成動画では隕石を中心として発光させています。
画像「flare」を[speed]=0でその場でチカチカ表示させるだけで手軽に発光させて雰囲気を馴染ませられるので試してみると良いでしょう。
This article cannot be commented on.