投稿記事

プラグインの記事 (89)

[講座]アニメーション画像でエフェクト量産【TRP_ParticleMZ】

←MV版マニュアルトップ
←MZ版マニュアルトップ


「MV形式のアニメーション画像」を使ってキャラクター対象のエフェクトを簡単に量産する方法を解説動画にしてみました!

導入記事を読み終わって、いざ「自作パーティクル設定を作ってみよう!」と挑戦してみる前に試すとちょうど良いレベルだと思います。

使い始めの方もぜひ挑戦してみてください!

https://twitter.com/thiropGames/status/1545582304495423488

次に講座記事・動画を作るモチベーションになるので、「内容がためになった!」という方はぜひ記事やツイートにいいね・RRをよろしくです!



雑記:講座動画ツクール

前回、講座記事を編集中に不幸にもロストしてしまったショックから、「次からは動画形式で作ってみようかな」と、講座動画の流れをツクールで編集できるようにちょくちょくいじってました。

https://twitter.com/thiropGames/status/1545034658940825601

慣れると記事で書くよりも短時間で編集できそうな感じです!

今回はわりとガッツリした内容でしたが、反応あるようでしたらちょっとしたテクニックみたいなのも気軽に投稿していきたいですね。

それではノシ

1件のチップが贈られています

チップを贈るにはユーザー登録が必要です。チップについてはこちら

[講座]「ガチャ演出」の技術紹介

メリー・プレミアムツクールデー!
https://twitter.com/thiropGames/status/1537450173642616833

ということで、ガチャ演出を作ってみました!

制作時間や演出の負荷など一切自重せずに本気でつくってみましたが、
たまにはこういうのも良いですね🤸‍♂️
(※演出の負荷は、オプションで動画化したものを流して対応予定)



今回の記事では、ガチャ演出で使っている技術の概要をざっと紹介していきます!

現行で配布されているプラグインで代用できそうな演出は、プラグインの紹介も行っていきますよ!
(※今回の演出はほぼ自作のスクリプトを使用してるので、実際に再現できなかったらゴメンナサイ)


かなり内容が濃いですが、初心者の方はフィルターやパーティクルまわりの使い方に絞って目を通すのがおすすめです。


グリッチ演出

言わずと知れた厨二エフェクト、グリッチ演出ですね!

手軽にかっこいいのでエフェクト初心者が多用して逆に安っぽくなります。

私は初心者なので迷わず使います!


フィルター類はツキミさんが公開している「FilterController」が断然使いやすいですね!

パラメータをアニメーションさせることもできるので、応用も◎!


フィルター効果は「pixi-filters」という(たぶん)準公式ライブラリを使用する場合がほとんどかと思います。

「pixi-filters」で用意されているフィルターは、デモページで確認することができます。

  • どんなエフェクトをかけようか
  • パラメータを細かく調整したい

という場合は、デモページで実際にエフェクトやパラメータを試してみながらプラグインで設定するのがおすすめです。

グリッチ演出では、入りと終わりで「slices(分割数)」のパラメータを動かして、画面が乱れた演出を作っています。

静止状態でもたまに「slices」を上下させてノイズ感をつくってます。


グリッチ時に画像の切り替え

グリッチと同時に、椅子に座った女の子がドラゴンの画像に切り替わっています。

単純に、切り替えのタイミングでイベントの透明化などで切り替えればOKですね!

同時に画面の色調変更も行って幻を見ているような雰囲気を作ってます。


また、ドラゴンの足元には炎のようなオーラエフェクトを加えてます。


もちろん、拙作の「パーティクルプラグイン」を使用してます!

MV/MZそれぞれに対応したものをBoothで販売しているほか、最近では公式DLCでも販売開始しました!

DLC版には英語マニュアルが付属してますので、英語のほうが得意な方はDLC版がおすすめです!

(※MV版の方が安価ですが、グループエディタが付属しません。サポート外ですが、フル機能のMZ版をMVで使用することも可能です。「TRP_ParticleMZ」のRPGツクールMVでの動作について


パーティクルはONにしてから徐々に発生します。

画像を切り替えた直後にオーラをマックスの状態にしたいので、「exceed」コマンドを使って表示した直後に時間を進めればOKです。


文字演出

1文字ずつ、ピクチャ画像として表示すればOK!

たしか、MZだとイージングも使えるんでしたよね。

アニメーションは「クソデカ拡大(20倍)+不透明度0」から「等倍+不透明度255」までイーズアウトで表示してます。

勢い・インパクトをつけて登場させたいときには常套のアニメモーションです!


文字のゆれ

入りのアニメーションのあとはランダムに揺らしています。

自分はピクチャ使わずにスクリプトでSpriteを動かしてるのですが、ピクチャだと大変かもですね…

ループコマンド内でスクリプトで手軽に動かすとしたら↓みたいな感じですかね

なお、運が悪いとあらぬ方向へ飛んでいきます(´・ω・`)
(ちゃんと定位置でシェイクさせるには、定点の座標を保持しておく必要があります)


文字裏のパーティクル

文字裏には、「爪痕のパーティクル」のを表示してます。
(紫のモヤモヤはドラゴンの足元へのパーティクルです。たまたま文字の背景に表示されていい感じになってますね)

パーティクルはスクリプトからSpriteを対象にも表示できますし、
通常のコマンドでピクチャを対象(「picture:ピクチャ番号」)にも表示できます。


また、爪痕の画像はMV形式(使ってるのはVXAのかも)のアニメーション画像を使用してます。

「Ctrl+I」で呼び出せるパーティクル画像はシンプルな画像が多いです。

ちょっと複雑な印象の演出にしたい場合は「Ctrl+A」で呼び出せるアニメーション画像から選ぶのがおすすめです◎

(※MZしか持ってない方は、ぜひぜひ素材集としてMVも買いましょう!セールだと80%オフとかしてるはず!)


実際、この演出もアニメーション画像を適当に切り替えながら良さげなものを選んだだけで、爪痕であることに特に意味はないです。

適当に試していると、思いがけない印象のエフェクトができるのでとってもおすすめ!



ガラスが割れる演出

グリッチ演出が終わるのと合わせて、床のガラスが割れる演出になります。

ガラスパーティクル


ガラス片の画像を用意して、パーティクルとして表示しました。

「img/particles」フォルダに画像を入れるとエディタで選択できるようになります。

画像の加工や制作ができる方は、イメージに合うパーティクル画像がない場合は自分で作っちゃうのがおすすめ!


パラメータの設定はspeed自体は抑えて、accelerationで徐々に舞い上がるようにして浮遊感を出しています。

ガラスの数は、frequency(射出頻度)で調整するのでなく、射出は1回に抑えてparticlesPerWave(射出ごとのパーティクル数)で調整するのが楽です。


また、ガラスのパーティクルに対してサブエミッターを設定し、ランダムにキラッと光りが反射するイメージのエフェクトを足してます。



細かな演出

ガラスが割れるタイミングで開放感を出すために細かい演出を行ってます。

  • 上下の黒帯を消す

  • 背景のブラー(ぼかし)を弱める

こういう、ここぞという時のインパクトのために、それまではあえて演出を抑えるような手法が自分は好きです。

(ブラーはフィルタープラグインでかけられます。)



落下演出

空を落下する演出。
(手軽にダイナミックな画面が作れるので個人的に多用しがち…)

自分はTilingSpriteで背景画像を表示して上下ループさせてます。


遠景表示に関しては、公開されてるプラグインでは砂川赳さんの遠景プラグインが多機能で使い勝手が良さそうです。

https://twitter.com/NewRPGProject/status/1530480448568053760


プラグインを使わずとも理論的には、

  • 上下に並べた2つのピクチャを並べる
  • 並べたまま上に移動
  • 下端が見切れるタイミングで元の位置に戻す

という手順でも上下ループを実現できます。


遠景の切り替え(上級)

空の遠景は「青空」→「夕空」→「夜空」と切り替わっています。

自分はSpriteに対してmaskを設定し、マスクを上方向に動かすことで画面下から徐々に透明にして次の遠景へと切り替えています。

マスクの設定は

  • マスク用のスプライトをマスク対象と同じ親に対してaddChild
  • 対象のスプライトに対してsprite.mask = maskSprite

といった感じでできます。若干直感的でなくて戸惑いやすいですね。


ピクチャで実現するには、ツキミさんの「GradientWipe」プラグインで再現できそうです。

https://twitter.com/sm3girls/status/958627400476061696

あと、別に単純に徐々に透明にして次の背景に遷移させるのも全然アリですね!
(元も子もなし!)


モーションブラー

空背景へと画面が切り替わるタイミングで「モーションブラー」を入れてます。

画面に勢いが出るのと、画面切り替わり時の不自然さを緩和できます!

  • モーションブラー無しとあり

また、画面切り替わりの位置に雲の画像を帯のように表示してごまかしてます。




雲とガラス片の視差パーティクル

落下中の空には、「雲パーティクル」と「細かなガラス片」を背景として表示しています。


(※大きいガラス片はSprite表示)

スクロールに連動させるために、対象を「weather(天候)」として表示しています。

さらに、スクロール速度を微妙にずらして近景・遠景的に視差を作っています。
パーティクルプラグインのわりと最近のアップデートで追加した機能で実現可能です。


対象を「weather」の代わりに「weather:x方向の連動率,y方向の連動率」で指定します。

「weather:1,0.5」とすると、y方向のスクロールに対して50%のみ付随して、ゆっくり・遠景のように見えます。

逆に「weather:1,1.5」とすると、150%の速度で付随して、早く・近景のように見えます。


パーティクルをフェードアウト

ここで表示しているパーティクルは夜の背景になったタイミングで全てフェードアウトさせてます。

「clear」コマンドを使えば、

  • 「射出を止める」か
  • 「即座に全てのパーティクルを消す」

ことができますが、徐々にフェードアウトさせることはできません。


拡張パッチとして配布している「ExMove」プラグインを使うことで、管理IDごとのパーティクル全体(コンテナ)を操作することが可能です。

天候を自然に切り替える際などに使える機能なので、入れておいても○


ガラス片に動画を写す(上級)

大きめのガラス片に動画が写っています!

が、時間的に短いのとガラス片の画像のクオリティが低くてよう分からんですね。
(大きい画像は絵心の無さをごまかせずにつらい……)

実は、videoエレメントはbitmapに普通に書き出せるのです!

bitmap._context.drawImage(video,0,0,width,height)

みたいな感じですね。

毎フレーム、bitmapへの書き込みを行えば普通のSpriteとして表示できちゃいます。

bitmapを使い回せば、複数のspriteで同じ動画の表示もできます!

        ┌→ sprite
video → bitmap ─→ sprite
        └→ sprite

ガラス片に写すのには、動画Spriteに対してガラス片のシルエットの画像でマスクを設定すればOKですね。

技術的には面白いので、もっと映える場面で使ってみたいです。


光が主人公に集まってくる演出

割れたガラスから解き放たれた光が、画面上方から降ってきて主人公に集まります。

ちなみに、色の違う光はレア確定演出です……地味!

これは……自分用に用意したパーティクルプラグインの拡張機能を使ってます。
(要望があるようなら配布する……かもです)


クライマックス

覚醒的な何かがあって主人公君は力を得たみたいです。

ここまで来たら、あとは感覚のままにエフェクトを足しまくるのみ!

やりたい放題ですが負荷は大丈夫なんでしょうか。自分にもわかりません!


背景にうっすら表示している六芒星的なエフェクトがお気にいり。

これも、VXAのアニメーション画像素材ですね!



パーティクルは基本、ブレンドモード「加算」で表示することが多いと思います。

なので、明るい画面よりも暗い画面の方が基本、映えます。

つまり、暗闇がもっともパーティクル演出が映えるわけですね。合理的!


みんなも、パーティクルを盛るときは画面の色調変更でちょっとだけ暗めにするのがおすすめです!

Z値を「spriteset」にすれば、色調変更の影響を受けずに一番手前に表示できるので合わせて使いましょう!


ズームブラー

フラッシュするタイミングでズームブラーもかけてます。

ある一点を中心に放射状にブラーをかけるフィルターで、汎用性が高いです!

戦闘のスキルモーションにも、イベント演出にも使える万能エフェクト!

フィルタープラグインで触ってみて、使い方を覚えましょう!

いきなり最大値でフィルターをかけて、徐々に「strength」を0に近づければOK。
(反対の動きにすると、徐々に集中感が増していくような演出に使えます!)


ブルームフィルター

最後に画面が白く明転しますが、色調変更に加えてブルームフィルターをかけています。

色調だけだと画面全体が白ずむ感じになりますが、ブルームフィルター(正確にはAdvancedBloomFIlter)も併用すれば、光が強まっていく感じを自然に出せます!

断然、かっこいいのでこのフィルターも使い方を覚えるのがおすすめ!



というわけで、ガチャ演出で使っている演出まわりの技術をざっと紹介してみました!


なんというか、久しぶりに自分の全力を出し尽くしてやりきった感ですね!

絵心がなくてイラストやデザイン的な見栄えを作れないので、モーションやエフェクト回りを頑張って来ましたが、まずまず満足できるとこまで来れたなぁと。

とはいえ、やはりイラストパワーは正義なので、用意してもらった素材をもっと活かせるように精進したいですね。



……今回の記事で、「いいね」と思った方はプレツクツイートの方も是非、いいね・RTをよろしくです!!

https://twitter.com/thiropGames/status/1537450173642616833

あと、パーティクルプラグインもついでによろしくです!

最後までお読みくださりどうもでした!

それでは、またノシ

  • アイコン
    LOSER/S ID00000792
    参考にさせて頂きます!!

2件のチップが贈られています

チップを贈るにはユーザー登録が必要です。チップについてはこちら

[講座]ギロチン振り子トラップの作り方【TRP_MoveRouteEx】


こんにちは。

突然ですが、1月に有償プランで配布した移動ルート拡張プラグイン「TRP_MoveRouteEx」を活用したギロチン振り子トラップの作り方をご紹介します!

未購入の方も、本記事で気になったら是非バックナンバーの購入をば!


(あと1つ売れればCi-en収益化できるんです……!一生収益化できる気がしなそうだったので、頑張って記事書きました🤸‍♂️)



ギロチン振り子トラップの作り方

TRP_MoveRouteExの使い方は、過去3回の記事で解説してるのでそちらを参考に。

とはいえ、久しぶりの記事なので使い方の解説も多少加えていきます。


振り子の画像を用意

振り子用の画像がないので、デフォ素材の武器画像Weapon1.png内の斧の画像を加工して用意しました。

RPGツクールMZをお持ちの方は、ツクール素材の利用規約に則ってご利用可能です。

……ドット絵を回転させてきれいに修正する技術がないので、斜め45度のままです!

(自分で画像を用意するときは、普通に下向きで作るのが良いと思います)


方向・パターンなしのキャラ画像に設定

上の振り子画像、通常であれば縦と横に余白をとって
「上下左右の方向」「3つの歩行パターン」を用意する必要があります。

ただ、ものすごい画像サイズになってメモリをどか食いしてしまうので、方向・パターンなしの画像を設定するプラグインを用意しました。

NoPatternCharacter.js (1.82kB)

ダウンロード

プラグインを導入して画像を設定したら、イベントのメモ欄に「<noPattern>」と記述すればOKです!

プライオリティは「通常キャラの上」にします。
(「通常キャラと同じ」だと、位置によっては不自然な重なり順に見えます…)


振り子の移動ルート設定

移動ルート拡張プラグインは、移動ルートのスクリプト欄に独自形式のコマンドを使って操作を行うプラグインです。

便利機能として、自律移動の内容をイベントページの1行目にスクリプトコマンド(MVは注釈コマンド)を入れて、その中に記述することができます。

自律移動のタイプをカスタムにしておくのを忘れずに!

スクリプトの1行目には「@route custom repeat freq:max」と記述します。


それぞれ、次の意味↓

  • @route:これから移動ルートを記述
  • custom:自律移動の設定
  • repeat:動作を繰り返す
  • freq:max:頻度最大

移動ルートのコマンド内容は次の通り↓

@route custom repeat freq:max
//初期角度を20度(実際は45+20=65度)に設定
cmd angle 20 anchor:0 d:0 @
//イベントトリガーを無効化
cmd trigger none @
//繰り返しの開始位置をここに設定
cmd repeat

//120フレームで70度(実際は+45で115度)まで回転
cmd angle 70 anchor:0 d:120 cubicInOut
//真下を通る60フレーム後まで待機
cmd wait 60
//距離が0.5以下なら、スイッチ1をOFF&イベントを実行
cmd if dist 0.5; cmd switch 1 off; cmd start @
cmd wait 60;
//反対方向に回転
cmd angle 20 anchor:0 d:120 cubicInOut
cmd wait 60
//距離が0.5以下なら、スイッチ1をON&イベントを実行
cmd if dist 0.5; cmd switch 1 true; cmd start @
cmd wait 60

角度の設定

順に見ていきましょう!

//初期角度を20度(実際は45+20=65度)に設定
cmd angle 20 anchor:0 d:0 @

角度の初期化してます。

今回は振り子の振れる角度を50°とします。(お好みでOK)


真下の状態が90度で、そこから半分の25°を引いた65°に初期角を設定したいのですが…

画像の振り子がすでに45°傾いてるので、65°-45°で角度を20°に設定しています。


その他のパラメータは↓

  • d:所要フレーム数。0として一瞬で角度を設定
  • anchor:回転の中心。振り子の棒の端っこ(上端)を中心に回転するので0
  • @:1フレーム待たずに即座に次のコマンドを実行する記号

トリガーの無効化

//イベントトリガーを無効化
cmd trigger none @

決定キーや触れたときにイベントが実行されないように、トリガーをnoneとして無効化。


繰り返し位置の設定

//繰り返しの開始位置をここに設定
cmd repeat

移動ルートの繰り返しは通常、一番最初の行に戻ります。

ここまでに行った初期化用のコマンドは繰り返して実行する必要がないので「repeat」コマンドで繰り返しの開始位置をこの行以降に設定します。


回転アニメーション

//120フレームで70度(実際は+45で115度)まで回転
cmd angle 70 anchor:0 d:120 cubicInOut

基本的なパラメータは初期角度を20°に設定したときと同じです。

所要フレームが120フレーム(2秒)になっているのと、

イージング(動作の緩急)を「cubicInOut」を指定して動きの最初と最後を遅くしてます。


(角度は、一番下の90°の状態から25°回転した115°……から画像の傾きの45°を引いた70°に設定してます。)



衝突判定

//真下を通る60フレーム後まで待機
cmd wait 60
//距離が0.5以下なら、スイッチ1をOFF&イベントを実行
cmd if dist 0.5; cmd switch 1 off; cmd start @

120フレームで角度をアニメーションさせてるので、真下を通るのは60フレーム後です。

60フレーム待ってから「if dist」コマンドで衝突判定を行います。


if dist 距離」で指定した距離以下の場合に同じ行のそれ以降の処理を行います。


今回はスイッチ番号1をOFFにしてからイベントを実行させています。

ちなみに、スイッチ番号1は「振り子が左から衝突」を意味するフラグです。


右からぶつかっているのでOFFとし、イベント内でプレイヤーを左に吹き飛ばします。


呼び出すイベント内容は、コモンイベントを呼び出すのみです。


コモンイベントの内容は後ほど解説します。

(※「cmd commonEvent」コマンドでそのままコモンイベントを呼び出すこともできますが、呼び出し元のイベントが分からなくなってしまうので一度イベント自身のイベントページを起動させています。)



その後は残りの角度アニメーションを待ってから、同じように反対方向へ角度アニメーションを行います。

cmd wait 60;
//反対方向に回転
cmd angle 20 anchor:0 d:120 cubicInOut
cmd wait 60
//距離が0.5以下なら、スイッチ1をON&イベントを実行
cmd if dist 0.5; cmd switch 1 true; cmd start @
cmd wait 60

スイッチ操作コマンドは「振り子が左から衝突」をONとしてます。



衝突時のイベント

衝突時に呼び出すコモンイベントは次の通り↓

上の3行は「フラッシュ」「シェイク」「SE」で衝突時のエフェクト。

次の「HPの増減」でダメージ処理。

その後の長めの「スクリプト」で吹き飛ばしの移動処理。

最後にスクリプトでの移動完了を待って「移動ルート」で向き固定をOFFに戻してます。



さて、スクリプトで行ってる吹き飛ばし処理は、移動ルートのジャンプで代用することも可能ですが…



プレイヤーの移動が完了してから移動ルートの次の行が実行されるという仕様のため、

移動中に振り子に衝突しても、プレイヤーが歩き終わって次のマスに到着してからジャンプで吹き飛ぶ動作となってしまいます。


そのため、スクリプトを使って衝突タイミングで強○的にジャンプ移動させてます。

スクリプトの解説はコメント行(//)を参照ください。

var event = this.character(); //コモンイベントを呼び出したイベント

var dx = 2; //x方向に吹き飛ぶ距離
var dy = 2; //y方向に落ちる距離

//スイッチ「左から衝突」がONならx方向の向きは反対
if($gameSwitches.value(1)===false)dx*=-1;

//吹き飛び先を固定するため、一度プレイヤーの実体位置を振り子イベントの位置に設定
//(見た目上の位置である_realXではなく、衝突判定など行う実体座標である_x)
$gamePlayer._x = event._x;
$gamePlayer._y = event._y;

//向きを固定してジャンプで吹き飛ばす
$gamePlayer._directionFix = true;
$gamePlayer.jump(dx,dy);

(※途中、吹き飛び先の座標がずれてバグったりしないように、プレイヤーの実体座標を補正してます)


以上で、基本的な動作ができました!

振り子の動きに合わせて左右に吹き飛びます!


自律移動の設定をコモンイベントに移す

振り子をたくさん配置し、ウェイトを使ってタイミングをずらすのですが、その前に自律移動の移動ルートをコモンイベント化して整理します。


イベントの1行目に設定していた移動ルートのスクリプトを新しいコモンイベントにペーストします。


そして、イベントの1行目を次のように置き換えます。

これで、コモンイベント「ギロチンルート」に移植した移動ルート設定を自律移動に設定できます。


複数のイベントを配置してから移動ルートの修正が必要になっても、コモンイベントの修正のみですみます!


複数の振り子を配置

さて、振り子イベントをコピペして好きなだけ配置しましょう!

そのままではすべて同じタイミングで振り子が振れます。


cmd repeat」コマンドより上の初期化処理の中に、イベントごとに異なる値のウェイトを挟んでタイミングをずらしたいのですが、自律移動の設定をコモンイベントに移してしまっています…


そこで、イベントのメモ欄のメタ設定を使ってウェイトの値をイベントごとに変えます。

ここでは、パラメータ名「w」を使って「<w:初期ウェイト値>」と設定します。


(※本記事では、イベントごとに0, 30, 60, 90, 120に設定)

コモンイベント「ギロチンルート」内の設定を修正↓



↓のコマンドでメタパラメータwの値だけウェイトさせてます。

cmd wait \MT[w@0]

@0」は、メモ欄に設定していない場合のデフォルト値を0とすることを意味します。



これで、タイミングを自由にずらすことができました!


ただ、振り始めるまで不自然に固まって見えてますね……

振り子ごとに初期角度等を設定するのはしんどそうです……


マップ侵入位置からギロチンゾーンをある程度離し、ギロチンが止まっている瞬間を見えないようにさせる方針にしましょう!


とはいえ、イベントは画面外だと自律移動がストップするという仕様が邪魔します……
(ついでに、振り子のタイミングもずれてしまう…)


以前の「落石ギミック」の記事では「cmd repeat リピートサイクル」を使って同期させましたが、今回はこの方法だとちょっとうまくいかないので、素直にプラグインを用意しました!

SelfMovementOutsideTheScreen.js (1.01kB)

ダウンロード

シンプルなプラグインです。

メモ欄に「<moveOut>」と設定しておくと、画面外でも自律移動がストップしません!


以上でギロチン振り子トラップ完成です!

お疲れさまでした!

未購入で気になった方は、バックナンバーの方をよろしくです!

1件のチップが贈られています

チップを贈るにはユーザー登録が必要です。チップについてはこちら

[講座]『天候:メテオ』の作り方【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でその場でチカチカ表示させるだけで手軽に発光させて雰囲気を馴染ませられるので試してみると良いでしょう。

1件のチップが贈られています

チップを贈るにはユーザー登録が必要です。チップについてはこちら

【1月プラン記事③】シンボルエンカウントの作り方

今月の有料プランの特典として「移動ルートの拡張プラグイン」を公開しました!

前回の落石ギミックの作り方解説に続いて、今回はプラグインを使ったシンボルエンカウントの作り方を解説します!

(※基本的な部分は前回で解説しているので、今回は新しいコマンドに絞ってサクサクと解説していきます!)


全体の処理の流れ

前回と同様にイベントページに自律移動を設定します。

完成したイベントページは↓のような処理の流れになります。


  • 自律移動用の移動ルート
  • 戦闘勝利時に敵が消える移動ルート
  • 戦闘逃走時に敵が1秒間点滅して待機する移動ルート

の3つの移動ルートを作成していきます。

それぞれコモンイベントのページに貼り付けてそれを呼び出していますが、イベントページ上で編集中して出来上がってからコモンイベントに移すと良いでしょう。



# 自律移動用の移動ルート
↓の通り!

 @route custom repeat skippable freq:max

//現在の位置を保存
cmd save
//リピート開始をこの下のコマンドからに変更
cmd repeat

//距離が4以内ならラベル「アラート開始」へ
cmd if dist 4; labeljump アラート開始

//それ以外の場合は30%で60フレーム待機
cmd if prob 30; wait 10; return;

cmd turnrand @ //ランダムな方向を向く
cmd speed 3 @ //移動スピードを3に

//3~6歩前進
cmd loop \RN[3,6]
cmd forward
cmd if dist 4; labeljump アラート開始
cmd loopend

//1秒待ってからリピート開始へ戻る
cmd wait 60
cmd return //-----------------------------------------------


cmd label アラート開始
//プレイヤーの方を向いてジャンプ&バルーン表示
cmd turntoward
cmd jump 0 0 @
cmd balloon bikkuri
cmd wait 20

cmd label チェイス

//速度を4.5に変更
cmd speed 4.5 @

//10回プレイヤーへ近づく
cmd loop num:10 @
cmd toward
cmd loopend @

//距離8以下ならなら繰り返す
cmd if dist 8; labeljump チェイス @

//距離8以上の場合はプレイヤーを見失う
cmd balloon kusha
cmd wait 60

それでは、新しく出てきたコマンドを中心に解説していきます!

ラベル(label)とラベルジャンプ(labelJump)コマンド

イベントコマンドにもある「ラベル」「ラベルジャンプ」が使えます!

「if」コマンド"それ以外の場合"の「else」処理が無いですが、代用としてラベル機能が活躍します!

//距離が4以内ならラベル「アラート開始」へ
cmd if dist 4; labeljump アラート開始
(距離が4以内でないときの処理。適当に歩き回ったり)
 ︙

cmd label アラート開始
(プレイヤーを見つけて追いかけてくる処理)


以下、距離が離れているときの処理を追っていきます。


「if prob」コマンドで確率で分岐

距離が離れているときは、「その場で待機」「ランダムな方向に進む」処理のどちらかを行います。

//それ以外の場合(距離が離れている)は30%で60フレーム待機
cmd if prob 30; wait 10; return;

(残りの70%のときの処理)

「if dist」コマンドはプレイヤーとの距離によって判定を行いましたが、今回は「if prob」コマンドを使って確率的に分岐させます。

「if prob 確率(%); 実行させる処理」

今回は「wait 10」で10フレーム待機後、「return」コマンドで移動ルートをいったん終えて繰り返しの最初に戻っています。

(※実際には「wait 10」と「return」は同時に行われるため、繰り返しの最初に戻ってから10フレーム待機しています)

「loop」コマンドで指定回数繰り返す

30%の確率でその場で待機しなかった場合には

  • ランダムな方向を向いて
  • 3〜6歩だけ前に歩いて
  • その場で60フレーム待機して

ループの最初に戻ります。


cmd turnrand @ //ランダムな方向を向く
cmd speed 3 @ //移動スピードを3に

//3~6歩前進
cmd loop \RN[3,6]
  cmd forward
  cmd if dist 4; labeljump アラート開始
cmd loopend

//1秒待ってからリピート開始へ戻る
cmd wait 60
cmd return //-----------------------------------------------

「loop」コマンド「loopEnd」コマンドまでの間の処理を、指定回数だけ繰り返します。


便利そうなコマンドですが、制限も多いです。

  • ネストが出来ない(loopの中で更にloopを使えない)
  • ラベルジャンプなどを使ってloopの中に入っても正しく動かない

単純に同じ処理を繰り返す分にはスッキリ見やすくなるので積極的に使っていきましょう!

(※ループ回数を0とすると無限にループします。「loopBreakコマンド」でループから抜けれるのでifコマンドと組み合わせて使うと○)


今回は、制御文字\RN[最小回数,最大回数]を使ってループ回数を3~6のランダムな回数に設定しています。(\RNの詳しい使い方はチートシート参照)

cmd loop \RN[3,6]

ループ内では「1歩前に進んで(forward)」「距離が4以下なら、ラベル:アラート開始にジャンプ」という処理を繰り返します。

  cmd forward
  cmd if dist 4; labeljump アラート開始


次にプレイヤーが近くにいてラベル:アラート開始に飛んだ場合の処理を見ていきます。

↓プレイヤーに気がついて驚く演出

cmd label アラート開始
//プレイヤーの方を向いてジャンプ&バルーン表示
cmd turntoward
cmd jump 0 0 @
cmd balloon bikkuri
cmd wait 20

次にいったんラベル「チェイス」を貼り直します。
プレイヤーを追っかけ回して、まだ近くにいた場合にはここに戻ってきます。

cmd label チェイス

//速度を4.5に変更
cmd speed 4.5 @

//10回プレイヤーへ近づく
cmd loop num:10 @
cmd toward
cmd loopend @

ループを使って10回だけ「プレイヤーへ近づく(toward)」コマンドを実行しています。

(※ところどころにある行末の「@」即座に次の行を実行するという記号です)



10回プレイヤーに近づいてから「if dist」コマンドで再度距離をチェックして

  • 追いかけ続ける(ラベル「チェイス」に戻る)か、

  • 諦める(移動ルートの最初に戻る)か

を判定します。

//距離8以下ならなら繰り返す
cmd if dist 8; labeljump チェイス @

//距離8以上の場合はプレイヤーを見失う
cmd balloon kusha
cmd wait 60

以上が自律移動のルートの全容となります!



戦闘勝利時の処理

戦闘勝利時に実行する移動ルートの設定は↓の通り!

@route this skippable

//トリガーを無効に & 通り抜けON
cmd trigger none; through @

//半透明にして少し待機
//cmd opacity 180; wait 10

//45フレームかけて透明に
cmd opacity 0 d:45 @
//同時に縦に引き伸ばす&完了までウェイト
cmd scale x:1 y:200 relative d:45 easeOut wait

cmd erase

「trigger」コマンドでイベント開始トリガーの制御

戦闘勝利時には、すぐにトリガーを無効(none)にして、再度イベントが実行されないようにしています。

//トリガーを無効に & 通り抜けON
cmd trigger none; through @

トリガーの操作は自律移動のカスタムルートに組み込むのも面白くておすすめです。

  • 半透明の間は触れない幽霊
    └cmd trigger none; opacity 128 //半透明にしてトリガー無効
    └cmd trigger event; opacity 255 //不透明にしてとりがーを「イベントから接触」へ

また、トリガーをauto(自動実行)、parallel(並列処理)にすると即座に開始するので注意。(※並列処理は繰り返し実行されるので、1度だけ並列で実行したいときは「parallel」コマンドを使用)


不透明度(opacity)、拡大率(scale)のアニメーション

//45フレームかけて透明に
cmd opacity 0 d:45 @
//同時に縦に引き伸ばす&完了までウェイト
cmd scale x:1 y:200 relative d:45 easeOut wait

前回の記事の「y」コマンドでy座標をアニメーションさせましたが、↑のopacity(不透明度)scale(拡大率)コマンドも同様の使い方が可能です。

「scale」コマンドはデフォルトで絶対値指定(relative:false = abs)ですが、ここでは相対値(relative:true = relative)で指定しています。

もし敵によって表示させる拡大率を変えたい場合には、相対値での指定が良いでしょう。

(※x:1として横に1%残しておくと、もし一定時間後に復活させたい場合に100倍にして元のサイズに戻すことができます)


また、「scale」コマンドの最後に「wait」とちうパラメータがつけられていますが、これは「scale」コマンドが完了するまで待機させるためのものです。

最後にイベントを消去してモンスターの消滅処理完了です!

cmd erase

逃走時の移動ルート

パーティーが戦闘から逃走したときは、1秒間だけその場で点滅してから再度追いかけさせます。

移動ルートの設定は↓

@route this skippable

//トリガーを無効に
cmd trigger none

//1秒間点滅
cmd loop num:6
  cmd opacity 100; wait 5
  cmd opacity 255; wait 5
cmd loopend

//トリガーをイベント接触に戻す
cmd trigger event

//元の自律移動のインデックスを「ラベル:チェイス」位置に戻す
cmd originalIndex チェイス

ここでもいったんトリガーを無効にして、点滅中は触れても戦闘が開始しないようにしています。好みによって、通り抜け(through)もONにすると良いでしょう。

//トリガーを無効に
cmd trigger none

点滅処理は「loop」コマンドを使って

  • 半透明(opacity 100)にして5フレーム待機
  • 不透明(opacity 255)にして5フレーム待機

を6回繰り返して1秒間(60フレーム)だけ点滅させています。

//1秒間点滅
cmd loop num:6
  cmd opacity 100; wait 5
  cmd opacity 255; wait 5
cmd loopend

点滅終了後にトリガーを元に戻して、

//トリガーをイベント接触に戻す
cmd trigger event

元の自律移動の実行箇所を「ラベル:チェイス」の位置に戻して、再度追いかけさせます。

//元の自律移動のインデックスを「ラベル:チェイス」位置に戻す
cmd originalIndex チェイス

originalIndex:元の移動ルートの実行インデックス変更

基本的にイベントコマンドの「移動ルートの設定」での移動ルートが終わると、自律移動の実行途中の箇所に戻ります。

「originalIndex」コマンドを使うと、元の自律移動のルートに戻った際の再開箇所を変えることができます。


いくつか戻る箇所の指定方法があります。

  • 「originalIndex ラベル名」:「cmd label ラベル名」の箇所
  • 「originalIndex repeat」:リピート開始地点
  • 「originalIndex インデックス(0~)」:指定インデックス(1つ目のコマンドが0)

ここでは「チェイス」ラベルに飛んで、即座にプレイヤーを追いかけさせています。





以上でシンボルエンカウントの解説終了です。

意外とシンプルに実装できましたね!


  • 「se」コマンドでSEなんかもつけたり
  • 移動速度や感知距離をメモ欄を使って設定できるように
     └メモ欄に<speed:5><dist:5>、パラメータに\MT[speed]、\MT[dist]など

したりするとそれっぽくなるでしょう!



おまけ:敵の視界をなんとか再現する

プレイヤーを見つける判定が「イベントとプレイヤーの距離」のみで、後ろから近づいても反応してしまいます。

現状では「if」コマンド単体で判定することはできませんが、擬似的に「イベントの前方にプレイヤーがいるか」を判定することができます。

プレイヤーとの距離をチェックしている箇所(数カ所あります)を以下のような感じに

//前方3マス目からの距離が3以内なら「アラート開始」へジャンプ
cmd f 3 d:0; if dist 3; b 3 d:0; labeljump アラート開始
cmd b 3 d:0

「f」コマンド「x」コマンドの親戚で、前方に判定無しで移動するコマンドで、「b」コマンドは後退するコマンドです。

何をやっているかと言うと、

  • 0フレームで瞬時に前へ3マス移動
  • その位置から3マス以内なら、元の位置(後方3マス)に瞬時に戻って「アラート開始」へ
  • それ以外なら瞬時に後方に3マス戻るだけ

というなんとも強引なやり方です。

(「b」コマンドで戻る処理は、「if」コマンドに成功にしたときと失敗したときの2箇所に入れないといけないので注意。)


強引ではあるけど、この方法なら前後左右に限らず移動とチェックを繰り返せばどんな図形範囲だろうと感知させることが可能です!

やったね!

(複雑になる場合は「save」「restore」で元の位置に戻すのが良いでしょう)



(……シンボルエンカウントについては各種プラグインも有志により配布されてるので素直にそちらを利用するのも全然ありですが、移動ルートだけでこれだけのシステムが作れるというのは可能性を感じないでしょうか?!)

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

2 3 4 5 6 7 8

月別アーカイブ

記事を検索