DynamicAnimation 基本的な使用法【RPGツクールMVプラグイン】

2020年02月20日

 このページはDynamicAnimationプラグインの解説の一部です。

 当プラグインの基本的な使用法、パラメータの指定方法を紹介していきます。
 そのままコピペもできるのでご活用ください。

目次



使用法


 まずは射撃(shot)型のテンプレートを使って説明していきます。

 例として、デフォルトにある『水/単体2(id = 82)』のアニメーションをスキルに設定してみてください。
 ※なお、画面フラッシュが見辛いので以降の例では消しています。

 そして、メモ欄へ以下を記述します。
<D-Animation:shot/>

 末尾の『/』に注意してください。一行で完結する場合はこのように記述します。


 見ての通り、射撃型では行動主体から対象へ向かって、まっすぐにアニメーションを飛ばします。
 ……が、これだけでは色々物足りません。

到達フレーム(arrival)

 このアニメーションのフレーム数は合計15です。特に設定がない場合は、15フレームで対象に到達します。
 ですが、このアニメは8フレーム目に泡が弾けるような内容になっています。できればその直前(7フレーム目)に到達し、そこで弾けるようにしたい。

 というわけで、到達フレーム数を指定します。
 以下のように射撃型に対して、パラメータを追加します。
<D-Animation:shot>
arrival = 7 // 到達フレーム
</D-Animation>


 いい感じになりました。
 敵にぶつかって炸裂するファイアボールとかも同じ要領で作れます。
 ちなみに『//』より右は注釈ですが、そのままコピペしても問題なく動きます。

繰り返し(repeat, interval)

 次は連射にしてみましょう。
 繰返回数(リピート)とその間隔を指定します。
<D-Animation:shot>
arrival = 7 // 到達フレーム
repeat = 5 // 繰返回数
interval = 2 // 間隔

</D-Animation>


 intervalは指定なしなら1が適用されます。この数値はアニメーションのフレーム時間(標準で4/60秒)に対応します。整数だけでなく1/4とか1/2といった値も入れられます。
 ただし、間隔が短すぎるとそれだけ大量のアニメーションを同時に呼び出されます。動作が重くなるので注意です。

 また、現在の繰返回数は『r』で数式として参照できます(0始まり)。
 さらに『repeat』で全体の繰返回数も参照できます。
 例えば、以下のように記述するとinterval=5から開始し、繰り返すごとに連射間隔が狭まるアニメーションとなります。
<D-Animation:shot>
arrival = 7 // 到達フレーム
repeat = 5 // 繰返回数
interval = repeat - r // 間隔
</D-Animation>


 ※上記はver1.001以上でないとエラーになります。ご注意ください。

大きさ(scaleX, scaleY)

 ところでちょっと泡がデカすぎませんか? 小さくしてみましょう。
<D-Animation:shot>
arrival = 7 // 到達フレーム
repeat = 5 // 繰返回数
interval = 2 // 間隔
scaleX = 0.5 // 横幅
scaleY = 0.5 // 縦幅

</D-Animation>


 横幅(scaleX)と縦幅(scaleY)を0.5に指定しました。1.0が元の大きさに相当します。
 もちろんサイズの変更はアニメーション編集画面でも可能です。ただし、こちらでは横幅と縦幅を別々に指定できます。せっかくなので、やってみましょう。 
<D-Animation:shot>
arrival = 7 // 到達フレーム
repeat = 5 // 繰返回数
interval = 2 // 間隔
scaleX = 1.0 // 横幅
scaleY = 0.5 // 縦幅

</D-Animation>


 結構、雰囲気が変わりますよね。
 うまくすれば、水の弾丸なんかも作れるかもしれません。

始点座標(sx, sy)

 泡がキャラクターの胴体から出てるのが気になる。……ってなわけで、始点座標を調整してみましょう。
 始点座標は『sx』と『sy』2つのパラメータからなります。ちなみに、sはstartの略です。

 shot型の場合、最初から行動主体の座標が設定されていますが、それを変更します。
<D-Animation:shot>
sx = a.x - 48 * mirroring // 始点X座標
sy = a.y - a.height - 48 // 始点Y座標

arrival = 7 // 到達フレーム
</D-Animation>


 頭上左から泡が出るようになりました。ちょっと数式っぽいものが出てきて嫌かもしれませんが、お付き合いください。

 『a』が行動主体の画像情報(スプライト)を意味しています。
 『a.x』『a.y』がそれぞれX座標とY座標です。
 ※中身が違うため、『a.atk』など普段の計算式に使用する項目は参照できません。その場合、『a._battler.atk』のように書く必要があります。

 『a.height』はキャラクターの高さになります。『a.y - a.height』で行動主体の頭上。そこからさらに-48ということは、頭上48ピクセルを始点Y座標とするという意味です。
 ツクールMVの基本的な操作レベルの話なので今更かもしれませんが、Y座標はマイナスが上になるんですよね。

 『a.x - 48』もそのまま、行動主体の左48ピクセルを始点とするという意味です。
 『mirroring』は対象がアクターになった際に、座標を左右反転させるための変数です。(詳細)

終点座標(ex, ey)

 始点と来れば、次は終点(対象に到達する座標)のほうもいじってみましょう。
 終点座標は『ex』と『ey』2つのパラメータからなります。もちろん、eはendの略です。
<D-Animation:shot>
ex = defaultX + 100 * mirroring // 終点X座標
ey = defaultY + 100 // 終点X座標

arrival = 7 // 到達フレーム
</D-Animation>


 特に意味はありませんが、敵の右下辺りで炸裂するようになりました。

 それより、謎の変数が出てきましたね。
 『defaultX』『defaultY』には、アニメーションの位置設定(頭上、中心、足元、画面)を考慮した対象(b)の座標が入っています。

  • 頭上:defaultX = b.x, defaultY = b.y - b.height
  • 中央:defaultX = b.x, defaultY = b.y - b.height / 2
  • 足元:defaultX = b.x, defaultY = b.y
  • 画面:defaultX, defaultY共にプラグインパラメータの設定値

 詳細は上記の通りです。
 いちいち『b.y - b.height / 2』とか入力するのも面倒なので、こちらを使っていくと便利です。

座標分散(sxRandom, syRandom, exRandom, eyRandom)

 では、対象に命中する座標を分散させたい場合はどうでしょうか? 連射技などはランダムでバラつかせたほうが自然ですよね。
<D-Animation:shot>
sxRandom = 50 // 始点X座標分散
syRandom = 50 // 始点Y座標分散
exRandom = 50 // 終点X座標分散
eyRandom = 50 // 終点Y座標分散

arrival = 7 // 到達フレーム
repeat = 5 // 繰返回数
scaleX = 0.5 // 横幅
scaleY = 0.5 // 縦幅
</D-Animation>


 上記のように始点・終点のX・Y座標をそれぞれ50ピクセルほど分散させてみました。
 演出上、終点だけのほうが自然な気もしますが、始点もついでです。
 なお、上下左右にそれぞれ50ピクセルという意味なので、分散の幅は100ピクセルになります。

 また、以下のような指定も一つの方法です。
<D-Animation:shot>
exRandom = b.width / 3 // 対象の横幅÷3
eyRandom = b.height / 3 // 対象の縦幅÷3

</D-Animation>

 これは対象の画像サイズを見て、その範囲で分散させています。
 ÷2ではなく÷3なのは大抵の場合、画像の端のほうが空白になっているためです。多少小さめに設定したほうが自然かなと。

放物線(arcX, arcY)

 投擲といえば放物線。もちろん機能を用意しています。
 放物線の高さとなるピクセル数を指定します。例によって、マイナスが上方向になります。
<D-Animation:shot>
arrival = 7 // 到達フレーム
arcY = -100 // 放物線のY座標成分
</D-Animation>


 泡はこういう動きのほうが似合いますよね。
 また『arcX』で横方向の放物線も指定可能です。サイドビューでは使いにくいかもしれませんが、独特の加速になるので何かに使えるかもしれません。

複数アニメーションの呼び出し(id)

 当プラグインでは複数のアニメーションを1つのスキルから自由に呼び出せます。
 やり方は単純に記述を追加するだけです。
<D-Animation:shot>
arrival = 7 // 到達フレーム
</D-Animation>
<D-Animation>
id = 81 // 水/単体1
</D-Animation>


 『id』にアニメーションIDを指定すれば、スキルに設定されている以外のアニメーションを呼び出せます。
 ちなみに『<D-Animation/>』とだけ記述すれば、ごく普通にアニメーションを実行します。

時間差(delay)

 ただし、上記の方法ではタイミングも何もなく全く同時にアニメーションを再生してしまいます。そこで時間差を指定します。
<D-Animation:shot>
arrival = 7 // 到達フレーム
</D-Animation>
<D-Animation>
delay = 7 // 7フレーム待つ
id = 81 // 水/単体1
</D-Animation>


 これで到達フレームに合わせて、次のアニメーションを再生するようにできました。

 終了タイミングに合わせたい場合は『auto』と指定すれば、自動的に待ってくれます。repeatやintervalも考慮して終了タイミングを計算してくれるので便利です。
<D-Animation:shot>
arrival = 7 // 到達フレーム
</D-Animation>
<D-Animation>
delay = auto
id = 81 // 水/単体1
</D-Animation>



ウェイト(wait)

 前の<D-Animation:shot>にウェイト(wait)を指定する方法でもタイミング調整できます。
<D-Animation:shot>
arrival = 7 // 到達フレーム
wait = auto
</D-Animation>
<D-Animation>
id = 81 // 水/単体1
</D-Animation>

 指定する箇所が違うだけで『時間差(delay)』とやることは全く同じです。お好きなほうでどうぞ。

残像(afterimage , afterimageInterval )

 おまけに残像機能です。
 残像の数と間隔を指定します。
<D-Animation:shot>
arrival = 7 // 到達フレーム
arcY = -100 // 放物線のY座標成分
afterimage = 5 // 残像数
afterimageInterval = 1 // 残像間隔

</D-Animation>


 残像間隔も仕様は通常の間隔(interval)と同じです。1がアニメーションの1フレームに対応します。
 ※『afterImage』ではなく『afterimage』です。大文字小文字の指定を誤ると動きません。

 この機能はカッコいいのですが、重いので注意が必要です。普通にrepeatを指定して表示数を増やすのと、負荷は同じだと思ってください。

回転(rotation)

 少し上級になりますが、回転も足してみましょう。
 実のところ、回転はアニメーションの編集画面でも可能なので、必ずしもここで設定する必要はありません。ただまあ、こういうのも可能だということで。

 回転率はラジアンといって2π(パイ)を360度として指定します。高校数学で習う範囲です。……が、たぶんみんな忘れていることでしょう。
 そんなわけで、とりあえずコピペで結構です。
<D-Animation:shot>
arrival = 7 // 到達フレーム
arcY = -100 // 放物線のY座標成分
scaleY = 0.5 // 縦幅
rotation = t/et * Math.PI * 2 // 回転率
</D-Animation>


※回転を分かりやすくするため細長くしています。

 『Math.PI * 2』が2πなのは分かると思うんですが、他にも『t』だの『et』だの新しい変数が出てきました。
 『rotation』はアニメーションの再生中、1/60ごとにリアルタイム演算を行う項目であり、これはその時間変化を計算する式です。

  • t:アニメーション開始からの経過時間(1/60秒単位)
  • et:アニメーションの終了時間(1/60秒単位)

 『t』は0から始まり、終了時間になると『et』に等しくなります。ということは『t/et』の値は0→1へと変化していきます。
 つまり上の数式全体は0〜2πへ変化します。これはアニメーションの再生中にちょうど一周するという意味です。

 説明が意味不明でも一周することさえ分かればOKです。

 ところで、上のアニメーションは違和感ありますよね。
 泡がぶつかってからも、回転を続けているのがしっくり来ません。
 というわけで、到達すると回転を止める式も紹介します。
<D-Animation:shot>
arrival = 7 // 到達フレーム
arcY = -100 // 放物線のY座標成分
scaleY = 0.5 // 縦幅
rotation = Math.min(t, arrival) / arrival * Math.PI * 2 // 回転率
</D-Animation>

 ここで登場する『arrival』は既に登場した『到達フレーム』と同じ名称ですが、微妙に中身が違います。アニメーションのフレーム単位ではなく、1/60秒単位になっています。
 ……が、特に違いを意識しなくとも通常は支障ありません。到達タイミングであることは同じです。

 『Math.min(t, arrival)』とは『t』と『arrival』の小さなほうを取るという意味です。
 要するに、tが到達時間に達した時点から式の結果が固定されます。それによって、そこで回転が止まります。


 これで到達時点で回転が止まるようになりました。

 さらに、2回転3回転させたい場合はどうでしょう?
 こちらは簡単。数式全体に対して値をかけるだけです。
<D-Animation:shot>
arrival = 7 // 到達フレーム
arcY = -100 // 放物線のY座標成分
scaleY = 0.5 // 縦幅
rotation = 3 * Math.min(t, arrival) / arrival * Math.PI * 2 // 回転率
</D-Animation>


 3回転にしてみました。

 当プラグインの基本的な使用方法については以上です。
 テンプレートは射撃型以外にも大量にありますし、パラメータも盛り沢山です。それについては、他のページをご覧ください。

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