DynamicAnimation&Motion サンプル技(魔法)【RPGツクールMZ&MVプラグイン】

2024年04月05日

 このページはDynamicAnimation(MZMV)および、DynamicMotion(MZMV)プラグインの解説の一部です。

 魔法系のサンプル技を紹介していきます。

 処理負荷の現実性から、基本的にはMV用アニメを使っています。MVを持ってない人はごめんなさい。
 MZでの利用は、DynamicAnimationMZからMVアニメを呼び出すプラグインを参照してください。

目次



召喚(2020/09/08更新)


 ※要screen型テンプレートです。(DynamicAnimation ver1.06で追加)
 アクターを消去して全体アニメを表示します。


// 全員透明化
<D-Motion:invisible>
performer = a.friendsUnit().members()
</D-Motion>

// 画面全体にアニメーション
<D-Animation:screen&wait/>

// 透明化解除
<D-Motion:visible>
performer = a.friendsUnit().members()
</D-Motion

 『performer = a.friendsUnit().members()』によって、アクター全体を対象にしています。
 ※『$gameParty.members()』でも有効ですが『a.friendsUnit().members()』なら、使用者がエネミーでも動作します。

炎の渦 DynamicMotion ver1.04(2020/05/09)


 対象の周囲に回り込む炎を起こします。
 DynamicMotion ver1.04(DynamicAnimation ver1.07)以降で可能な表示優先度の変更機能を用いています。
 アニメーションは『67:炎/単体2』ですが、好きなものに変えてください。


<D-Setting:MV>

<D-Animation:vortex> // 渦型
position = 2
repeat = 100
interval = 1/4
scaleX = 0.5
scaleY = 0.5
radiusX *= 2 + b.width/2 // X半径
radiusY *= 1 // Y半径
radX *= 5 // 回転角度X
radY *= 5 // 回転角度Y
z = this.y < b.y ? b.z - 1 : this.z // Z座標
</D-Animation>

 X半径(radiusX)に『b.width/2』を足しているのは、最終的な半径を対象の横幅に合わせるためです。そっちのほうが炎に包まれた感じがしてカッコいいからですが、その辺はお好みで調整してください。

 『z = this.y < b.y ? b.z - 1 : this.z』はZ座標(=表示優先度)の変更処理です。「アニメーションの位置が対象より上の時はZ座標−1、それ以外は元の値」を設定することで背面表示しています。

 ※『z = b.z』でよさそうな気がしますが、なぜかアニメーションの一部描画が止まるバグが発生しました。解決できそうにないのでこれを使ってください。

渦潮 DynamicMotion ver1.04(2020/05/12)


 敵陣の中心を基準に敵をグルグル回します。
 単純な円周運動のサンプルは既にありますが、こちらは全体攻撃向けです。
 スキルのアニメーションは『Darkness2』のパターンを繰り返しているだけです。位置は『画面』にしています。


<D-Setting:MV>

<D-Animation>
sy = defaultY + 50 // 位置を下寄りに
z = 0 // 対象より下に表示
</D-Animation>

<D-Motion:target&revolve>
frame = 40
performerDelay = 2 // 時間差
radiusX *= 2 // X半径
radiusY *= 1 // Y半径
radX *= 4 // X回転角度
radY *= 4 // Y回転角度
dx = sx + (screenX - sx) * (Math.sin(t/et * Math.PI))
dy = sy + (screenY + a.height/2 - sy) * (Math.sin(t/et * Math.PI))

</D-Motion>

 公転(revolve)型の機能によって、対象をグルグル回しています。
 『performerDelay 』に時間差の値を指定しないと敵キャラが重なってしまいます。

 最も難解なのは『dx, dy』の数式ですが……。これは敵キャラが敵陣中央に向かって移動し、また元の位置へと戻ってくるという式です。
 sinは90度毎に値を0->1->0と変化させるので、その性質を利用して行ったり来たりさせています。
 この数式へさらに回転成分を加算することで、全体の動作を実現しています。

サイコキネシス(2020/05/25)


 ランダム位置に出現した岩石を、さらにランダム位置に移動。そこから対象へぶつけます。
 ランダム位置を保持するためには継続(keep)型のテンプレートを用います。

 なお、継続型の定義は2020/05/09に更新していますので、反映していないとうまくいかない可能性があります。


<D-Setting:MV>

// 術者前方にランダムで砂煙
<D-Animation>
id = XX // 砂煙のアニメ
position = 1
repeat = 15
sx = a.x - 100
sy = a.y - 60
sxRandom = 50
syRandom = 20
</D-Animation>

// 砂煙の発生位置を引き継いで岩石登場→対象の上空へ移動
<D-Animation:keep>
id = XX // 岩石の停止アニメ
delay = 1
ex = b.x
ey = 50
exRandom = 200
eyRandom = 50
arrival = 8 // 対空地点に到達するフレーム
</D-Animation>

// 対象の上空から対象へ岩石が殺到
<D-Animation:shotRandom&keep>
id = XX // 岩石の衝突アニメ
arrival = 5
</D-Animation>

 継続(keep)型には、前の<D-Animation>の終点座標を始点にコピーする効果があります。また、繰り返し回数などの情報も自動で引き継ぎます。
 ポイントは<D-Animation:shotRandom&keep>というように、&で後ろ側に結合することです。これはshotRandom自体が情報を持っているためです。この場合、後ろ側のテンプレートの設定が優先されます。

 また、このスキルには3つのアニメーションが必要です。

  • 砂煙のアニメ:Earh1で作成した単純な砂煙です。
    スライディングで使用しているものと同じです。
  • 岩石の停止アニメ:Earth3の岩石を25フレーム分コピーしたものです。
    合成方法を『通常』にする以外は一切の変更不要です。
  • 岩石の衝突アニメ:↑の岩石が6フレーム目から砕けるアニメです。


炎の帯(2021/06/16)


 ※DynamicAnimationを最新(2021/06/16〜)へ更新してください。残像機能が正常動作しない不具合を修正しています。

 尾を引く放物線を対象に放ちます。


 必要なアニメーションは二つあります。

 一つ目は帯を構成するアニメーションです。左を向いた固定パターンのアニメーションを指定します。円形などでも構いません。
 このサンプルでは『Fire2』の2パターン目を90度回転させて配置しています。
 設定したフレーム数がそのまま放物線が着弾するまでの時間になります。


 二つ目は着弾のアニメーションです。こちらは特筆すべき点はありません。
 このサンプルでは『Fire1』のパターンを使用していますが、そのまま『67:炎/単体2』などでもよいと思います。

<D-Setting:MV>

// 炎の帯
<D-Animation:arc&lookCourse>
id = X
position = 2 // 位置を足元に
ey -= 48 // 位置を少し上に調整
arcY = -150 // 放物線の高さ
scaleX = 2 // 横幅
scaleY = 1 // 縦幅
afterimage = 10 // 残像の数
afterimageInterval = 1 // 残像の間隔
</D-Animation>

// 着弾
<D-Animation:keep>
id = X
</D-Animation>

 赤字部分には2つのアニメーションをそれぞれ指定してください。

 『lookCourse』テンプレートによりアニメーションに進路を向かせています。これに残像を加えることで、尾を引く放物線のように見せています。残像の数や間隔を好きなように調整してください。
 『scaleX = 2』によりアニメーションを横に引き伸ばしています。放物線を自然に見せるための調整です。

ブレス(2023/07/31更新)


 口からブレスを吐きます。


 アニメーションは『82:水/単体2』を使用しています。必要に応じて炎などに変更してください。
<D-Animation:shotRandom>
position = 3 // 対象全体
repeat = 15
arrival = 7
scaleX = 0.5
scaleY = 0.5
sx = a.x + Number(a.enemy().meta.BreathX || 0)
sy = a.y - a.height/2 + Number(a.enemy().meta.BreathY || 0)
ey = defaultY -50 + 300 * r/repeat // 上から下へ終点移動
exRandom = 200
limitFlash = 0 // フラッシュ制限
limitSound = 4 // 効果音制限
</D-Animation>


 赤字部分によってブレスの始点を調整しています。
 敵キャラのメモ欄に以下のように記載してください。以下の例では中央から右に50ピクセル、上に50ピクセルほど始点をずらしています。
<BreathX:50>
<BreathY:-50>


 なお、上記の赤字部分は使用者が敵キャラの場合しか想定していません。アクターも含む場合は以下に差し替えてください。
sx = a.x + ((a.isEnemy() ? Number(a.enemy().meta.BreathX) : Number(a.actor().meta.BreathX)) || 0)
sy = a.y - a.height/2 + ((a.isEnemy() ? Number(a.enemy().meta.BreathY) : Number(a.actor().meta.BreathY)) || 0)

 『BreathX』『BreathY』の文字列は好きなように変更しても構いませんし、他の文字列を追加することもできます。
 例えば『EyeX』『EyeY』を追加して、目から光線を撃つ敵を作ってもいいと思います。

スーパーノヴァ(2023/11/23)


 自在に遠景(近景)を表示するプラグインとの組み合わせによって、演出中に戦闘背景を変更しています。
 リンク先のプラグインはver1.011〜に更新してください。そうしないと、後述の不透明度の機能が使えません。


 アニメーションは『109:無属性/全体2』を使用しています。お好きなように変更してください。
<D-Motion>
commonEvent = x
wait = 5
</D-Motion>

// 爆発
<D-Animation>
id = 109
position = 3
</D-Animation>

 まず『commonEvent = x』によってコモンイベントを呼び出します。xの部分に番号を設定してください。

 呼び出したコモンイベント内からプラグインコマンドを呼び出し、背景を変更します。今回は以下のように設定しています。
 ※画像はクリックで拡大表示できます。



 コツとしては不透明度をテキストモードで入力し『$gameVariables.value(1)』というように変数の値を参照するように設定することです。
 以降、指定した番号の変数を変更するだけで不透明度も変化するようになります。
 ※いちいち手動で不透明度を変更してもいいですが、超面倒です。

フレア(2024/04/05)


 対象に向かって線が収束し、放射状に炎が飛び出していきます。
 戦闘背景の色調を変更するプラグインによって、演出中に背景を暗くしています。


// 背景を暗くする
<D-Motion>
plugin = NRP.ChangeBackColor 128 128 128 15
</D-Motion>

// 収束
<D-Animation:converge&lookCourse&wait>
id = 1
repeat = 50
interval = 1/4
scaleX = 2 * (1-t/et) // 徐々に縮小
scaleY = 0.25 * (1-t/et) // 徐々に縮小
opacity = 255 * t/et // 徐々に不透明

radiusX *= 1 // 収束半径X
radiusY *= 1 // 収束半径Y
limitSound = 999 // 効果音制限(最初の1回のみ演奏)
</D-Animation>

// フラッシュ([赤,緑,青,強さ], 時間)
<D-Motion>
script = $gameScreen.startFlash([255,128,0,128], 30);
</D-Motion>

// 放射
<D-Animation:radiate&lookCourse>
id = 2
repeat = 30
interval = 1/2
scale = 2 * t/et // 徐々に巨大化
opacity = 255 * (1 - t/et) // 徐々に透明

radiusX *= 0.5 // 放射半径X
radiusY *= 0.5 // 放射半径Y
limitSound = 8 // 効果音制限
limitFlash = 2 // フラッシュ制限

</D-Animation>

// 背景を戻す
<D-Motion:delay>
plugin = NRP.ChangeBackColor 255 255 255 15
</D-Motion>

 使用しているアニメーションは2つありますが、いずれもFire2の2パターン目を固定で貼り付けているだけです。


 scaleXとscaleYの値に格差を付けることで収束側のアニメーションを細長く見せていますが、実際は全く同じパターンです。

 t/etという式は現在時間/終了時間という意味で0から開始し、最終的には値が1になります。つまり「scale = 2 * t/et」という式はアニメーションのサイズが0倍から始まり最終的には2倍になるということです。
 「scaleX = 2 * (1-t/et)」はその反対です。アニメーションの横幅が2倍から0倍へと変化していきます。
 opacity(不透明度)も同様です。

 limitSound, limitFlashの値を大きくすると効果音やフラッシュの実行回数を抑制できます。repeatが多く、intervalが小さい場合は制限しないと目と耳によろしくないです。converge型、radiate型は最初から設定されているのでなくても大丈夫ですが。

 lookCourseによってアニメーションは進行方向を向きます。

 「script = $gameScreen.startFlash([255,128,0,128], 30);」はイベントコマンドの画面のフラッシュと全く同じものを呼んでいます。

 >DynamicAnimationMZプラグインに戻る
 >DynamicAnimationプラグインに戻る
 >DynamicMotionMZプラグインに戻る
 >DynamicMotionプラグインに戻る
 >RPGツクールMZ&MV目次に戻る
posted by 砂川赳 at 19:00 | RPGツクールMZ&MV | このブログの読者になる | 更新情報をチェックする