DynamicAnimation&Motion サンプル技A【RPGツクールMZ&MVプラグイン】

2022年02月24日

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

 サンプル技を紹介していきます。少し複雑なものをいきます。
 コピペしてスキル(アイテム)のメモ欄に貼り付けできます。そのまま使うも改造するも自由です。

目次



爆裂脚


 ライダーキック的な挙動で敵に衝突します。


 アニメーションには『id=107(無属性/単体2)』を使っていますが、そこはお好みでどうぞ。
// 自動前進しない
<D-Setting:NoStep>

// 回転しながら浮上
<D-Motion:jump&roll&wait>
frame = 8
rotation *= 4
airY = -200 // 空中Y座標
ex = sx - 50 * mirroring
</D-Motion>

// 体を傾けて衝突
<D-Motion:crash>
frame = 3
rotation = (Math.PI * 2) / 6 // 360/6度
</D-Motion>

// 角度を戻す&しゃがむ
<D-Motion>
rotation = 0
motion = abnormal // 瀕死ポーズ
frame = 10
</D-Motion>

// アニメーション
<D-Animation/>

// 対象が吹っ飛ぶ
<D-Motion:jump&target>
ex = sx - 500 * mirroring
wait = 10
</D-Motion>

// 対象元の位置へ
<D-Motion:jump&home&target/>

// 戻る
<D-Motion:return/>


ズームアタック(2020/03/29)


 攻撃しながら徐々に対象へ向かってズーム処理をかけます。
 ※ズーム処理のテンプレート化に伴い記述を簡略化しました。(2020/03/29)


<D-Motion:near&zoomB/> // 対象にズーム
<D-Motion:attack/> // 武器振り
<D-Animation/> // アニメーション
<D-Motion:return&zoomOff/> // ズーム解除

 行動主体にズームしたい場合『zoomA』を使用してください。
 なお、これらの処理はズーム対象が移動していても自動で追尾します。

スライディング(2020/03/24)


 スライディングで敵をスピンさせます。


 スキルに設定するアニメーションの位置は『足元』にしてください。
 また砂煙用のアニメーションが別途必要です。下の例では『Earth1』のパターンを使っています。位置は『足元』。合成方法は『通常』に設定すると自然です。


// 90度回転して体を地面へ
<D-Motion:wait>
duration = 1
airY = a.height/3
rotation = (Math.PI * 2) / 4
</D-Motion>

// 砂煙のアニメーション
<D-Animation:self>
id = XXX // ←ここに砂煙用のIDを指定
repeat = 5
</D-Animation>

// 対象の左へ
<D-Motion:pierce>
frame = 5
wait = 4
ex = defaultX - 100 * mirroring
</D-Motion>

<D-Animation/> // アニメーション

// 敵がスピン
<D-Motion:target&roll&jump>
frame = 5
rotation *= 3
arcY = -100
</D-Motion>

// 角度と位置を戻す
<D-Motion:wait>
delay = 1
duration = 1
airY = 0
rotation = 0
</D-Motion>

// しゃがんで待つ
<D-Motion:wait>
motion = abnormal // 瀕死ポーズ
frame = 5
</D-Motion>

<D-Motion:return/> // 戻る


ウルトラジャンプ(2020/08/30修正)


 ランダムで敵を踏みつけます。
 例では範囲を『敵4体ランダム』にしていますが、『敵全体』などにしても問題なく機能します。


 スキルに設定するアニメーションを『頭上』に設定することで頭を狙います。
 例では『2:打撃/エフェクト』を頭上に変更したものを使用しています。
<D-Setting:NoStep> // 自動前進禁止

// 着地に合わせてアニメーション表示
<D-Animation:damage>
delay = 7 // 最初の着地までのフレーム
nextDelay = 7 // 滞空時間に間隔を合わせる

</D-Animation>

// 対象ごとにジャンプで踏む
<D-Motion:crash&jump&every>
ey += b.height/8 // 少し下を狙う
arcY = -200
motion = victory // 勝利ポーズ
frame = 7 // 移動(滞空)時間
nextDelay = 7 // 7フレーム間隔

// ジャンプの効果音
playSe = Jump1
wait = auto
</D-Motion>

// 戻る
<D-Motion:return>
arcY = -200
damageAll = false // ダメージ表示は個別に任せる
</D-Motion>

 これを応用すれば、順番に体当りしていく技なども作成できます。
 タイミング調整が少し難しいので注意です。赤字部分に気をつけてください。

払い抜け(2020/03/31)


 対象とすれ違いながら、斬撃を放ちます。
 対象との角度によって斬撃の角度も変化します。


 以下のように左向きの斬撃を作ります。
 「6:斬撃/物理」を一括設定で45度回転させるなどすれば可能です。


<D-Setting:NoStep> // 自動前進禁止

// 対象の向こうまで移動
// X座標だけ指定すれば、Y座標も自動計算
<D-Motion:pierce&attack>
frame = 5
ex = defaultX - 150 * mirroring // 対象の左150pxまで移動
</D-Motion>

// 対象との位置関係でアニメーション角度変更
<D-Animation>
delay = 2
wait = auto
rotation = da.startRotation(Math.atan2(a.y - a.height/2 - defaultY, a.x - defaultX))
</D-Animation>

<D-Motion:return/> // 戻る

 赤字部分で、色々と細かい細工をしています。

  • da.startRotation()は開始時点の角度を保持する作者の独自関数です。
  • Math.atan2()は行動主体(a)と対象(defaultX, Y)の角度を求めます。
    こちらはJavaScriptの標準機能です。

 ※若干、意味不明かもしれませんが、コピペで大丈夫なのであまり気にしないでください。

疾風剣(2020/04/03)


 対象とすれ違いながら切り刻みます。
 角度を変えながらランダムで斬撃を再生しています。
 スキルに設定したアニメーションは「6:斬撃/物理」の色調を変えたものです。


<D-Setting:NoStep> // 自動前進禁止

// 対象とすれ違いながら武器振り
<D-Motion:pierce&attack>
frame = 5
ex = defaultX - 150 * mirroring
</D-Motion>

// 武器の止めポーズ
<D-Motion:attack2>
delay = 2
</D-Motion>

// 角度を変えながら斬撃リピート
<D-Animation>
delay = 3
repeat = 10
rotation = (Math.PI * 2) * da.random()
</D-Animation>

<D-Motion:return/> // 戻る

 基本的には『払い抜け』の流用です。
 『rotation(回転角度)』をランダムに変化させることで、様々な角度から斬撃を繰り出すようにしています。
 『Math.PI * 2』は360度の意味、『da.random()』は0〜1未満の値を取る関数です。つまり、0〜359度という意味ですね。

練気拳(単)(2020/04/06)


 敵を引きつけながら殴ります。
 スキルには単なる打撃アニメを設定しています。
 さらに吸引用のアニメが必要です。例では『102:闇/単体2』を元に、合成方法を一括設定で『加算』に変更しています。


// 自身に吸引アニメを表示
<D-Animation>
id = 102 // ←ここに吸引アニメのIDを指定
sx = a.x
sy = a.y - a.height/2
</D-Animation>

// 対象を引き寄せる
<D-Motion:target&wait>
frame = 5 // 引き寄せ時間
ex = subject.x - (subject.width/2 + a.width/2) * mirroring
ey = subject.y - subject.height/2 + a.height/2

</D-Motion>

// 殴るアニメとモーション
<D-Animation:follow/>
<D-Motion:thrust/>

// 対象をhomeへ戻す
<D-Motion:target&home>
delay = 1 // 殴り初めから吹っ飛ぶまでの時間差
frame = 2 // 吹っ飛び時間
</D-Motion>

 『subject』は常にスキルの行動主体を意味します。まぎらわしいですがモーション対象を変更した場合、『a』はモーション対象者となります。

練気拳(全)(2020/04/06)


 練気拳と言えば、そもそも全体技です。もちろんちゃんと用意しています。
 ※元ネタはロマサガ3です。


// 自身に吸引アニメを表示
<D-Animation>
id = 102 // ←ここに吸引アニメのIDを指定
nextDelay = 4
sx = a.x
sy = a.y - a.height/2
</D-Animation>

// 対象を引き寄せる
<D-Motion:target>
frame = 5
performerDelay = 4
ex = subject.x - (subject.width/2 + a.width/2) * mirroring
ey = subject.y - subject.height/2 + a.height/2
</D-Motion>

// 殴るアニメ(対象を追尾)
<D-Animation:follow>
delay = 5
nextDelay = 4
</D-Animation>

// 殴るモーション(対象毎)
<D-Motion:thrust&every>
delay = 5
nextDelay = 4
motionFrame = 1
</D-Motion>

// 対象をhomeへ戻す
<D-Motion:target&home>
delay = 6
frame = 2
performerDelay = 4
</D-Motion>

 ポイントは『performerDelay』と『nextDelay』の値を一致させることです。これが対象一体毎の処理に対する時間差となります。
 ちょっとややこしいですが『performerDelay』はモーション対象が複数いる場合の時間差です。
 『nextDelay』は「対象毎にアニメーションを表示する時間差」および「対象毎に行動主体がモーションを実行する時間差」です。

分身剣(2022/04/14更新)


 ※DynamicMotion ver1.03以降が必要です。
 分身しながら切り刻みます。


<D-Setting:NoStep>
<D-Motion:near/>

// 右から攻撃アニメ
<D-Animation:random>
repeat = 8
interval = 2
</D-Animation>

// 左から攻撃アニメ
<D-Animation:random>
repeat = 8
delay = 1 // 1フレームずらす
interval = 2
rotation = -Math.PI/2 // 90度回転
</D-Animation>

// 左右に分身しながら武器振り
<D-Motion:attack&wait>
repeat = 6
addX = (t % 4 < 2) ? -(b.width + a.width) : 0
scaleX = (t % 4 < 2) ? -1 : 1 // 左右反転

motionFrame = 1
frame = 3
</D-Motion>

<D-Motion:return/>

 赤字部分で2/60秒毎に瞬間的に位置を変えています。
 『scaleX』はバトラーの横幅を意味する値ですが、値を『-1』にすると左右反転になります。反転は『mirror = true』でも可能ですが、リアルタイムで変更したい場合は『scaleX』が使えます。

変身(2020/11/15更新)


 バトラーの画像を変更します。
 文字通りの変身技にも使えますが、それ以外にもモーションパターンの追加などへ利用可能です。
 また、敵も同じ要領で画像を変えられます。


// グラフィックを変更して接近
<D-Motion:near>
image = Actor1_1
</D-Motion>

<D-Motion:attack/>
<D-Animation/>

// グラフィックを戻して元の位置へ
<D-Motion:return>
image = ""
</D-Motion>

 『image = Actor1_1』というように指定した画像へとキャラを変更します。
 戻す時は『image = ""』というように空白文字を入力すればOKです。

 以下のように数式を記述すれば、可変にもできます。
image = "Test" + a.actorId() + "_2"

 例えば、アクターIDが4ならば『Test4_2』に変更されます。

 ちなみに、この画像変更は戦闘中のみの一時的な効果となります。

奥義演出(対象以外消去)(2021/01/20)


 行動主体と対象以外を消去して奥義っぽい演出を行います。
 ※DynamicMotion(およびMZ版)を2021/01/20以降のバージョンに更新する必要があります。


// 自動前進禁止
<D-Setting:NoStep>

// 行動主体と対象以外を透明化
<D-Motion:invisible>
condition = a != subject && a != b
performer = $gameParty.battleMembers().concat($gameTroop.aliveMembers())
</D-Motion>


// 接近
<D-Motion:near/>

// 武器振り
<D-Motion:attack>
repeat = 3
</D-Motion>

// アニメーション&ウェイト
<D-Animation:random&wait>
repeat = 20
</D-Animation>

// 戻る
<D-Motion:return/>

// 透明化解除
<D-Motion:visible>
condition = a != subject && a != b
performer = $gameParty.battleMembers().concat($gameTroop.aliveMembers())
</D-Motion>

 重要なのは赤字部分です。ここで透明化の制御を行います。
 間の部分は好きなように変更してください。ただし、アニメーションにはwaitも必要なことに注意です。これがないとアニメーションの終了を待たず、透明化が解除されてしまいます。

 また、暗転演出は上の記述に含まれていません。必要なら以下をご覧ください。
 http://newrpg.seesaa.net/article/475496918.html#darkness

詳細

performer = $gameParty.battleMembers().concat($gameTroop.aliveMembers())

 によって、『全アクター』と『生存している敵』を透明化の対象としています。
 なぜ、敵だけ生存者に絞っているかというと、そうしないと死んだ敵の表示まで透明化の解除時に復活してしまうからです。
 それに加えて
condition = a != subject && a != b

 によって、スキルの使用者と対象を透明化の対象から除外しています。

分身剣(残像版)(2022/04/14更新)


 残像を引き連れながら敵の周囲を回り、斬撃を繰り返します。
 残像プラグインの機能を使っているため、導入されていることが前提です。
 スキルに設定するアニメーションは普通の斬撃でよいと思います。他にも『通常攻撃』にしておくと武器によってアニメーションが変わるので面白いです。

 ※モーション設定プラグインの旧バージョンが入っているとうまく動作しない模様なので、導入している場合は要更新です。
 ※DynamicMotionが2021/09/11以降のバージョン(sx, syの指定に対応)である必要があります。



<D-Setting:NoStep>

// 対象の中心より半径分右へ移動
<D-Motion:crash>
frame = 3
ex = b.x + (15 + b.width/2) * mirroring
script = a.afterimage().start();
</D-Motion>

// ランダムな角度で斬撃
<D-Animation>
repeat = 16
rotation = (Math.PI * 2) * da.random()
</D-Animation>

// 武器を振る
<D-Motion:attack>
repeat = 5
interval = 3
motionFrame = 1
</D-Motion>

// 対象を中心に円運動
<D-Motion:revolve&wait>
frame = 20
sx = b.x
radiusX = (15 + b.width/2) // X半径
radiusY = (15 + b.width/2) / 2 // Y半径
radX *= 3 // X方向に3周
radY *= 3 // Y方向に3周
z = a.y + (b.height - a.height)/2 > b.y ? b.z+1 : b.z-1
scaleX = (a.y + (b.height - a.height)/2 > b.y ? 1 : -1) * mirroring

</D-Motion>

// 半径分右から開始して元の位置へ
<D-Motion:return>
sx = b.x + (15 + b.width/2) * mirroring
z = 3
script = a.afterimage().end();
</D-Motion>

 残像機能については残像プラグイン自体の説明をご覧ください。
 基本的にはrevolve型を利用して敵の周囲を回らせています。

 『15 + b.width/2』の部分が円運動の半径です。『15 + 対象の横幅÷2』の意味となります。
 性質上、対象の横幅が小さすぎると円周が小さすぎてショボくなる難点があります。こだわるなら最小値を保証する数式にするといいかもしれません。
 例:『Math.max(50, 15 + b.width/2)』。

 最も難解なのは『z = a.y + (b.height - a.height)/2 > b.y ? b.z+1 : b.z-1』『scaleX = (a.y + (b.height - a.height)/2 > b.y ? 1 : -1) * mirroring』といった赤字部分の数式だと思います。

 前者は敵との位置関係によって、アクターを前面に表示するか背面に表示するかを調整するためのものです。Y座標(画像縦幅も考慮)を比較し、アクターが下側にいる時は前面、上側にいる時は背面に表示させています。
 後者もY座標を比較しているのは同じですが、こちらはアクターを左右反転させるために使っています。同じくアクターが下側にいる時は左向き、上側にいる時は左右反転させて右向きに表示させています。
 これはscaleXの値を-1にすると、バトラーが左右反転する性質を利用しています。さらに敵側が使った場合は左右反転(mirroring)されるよう考慮しています。

暗転(2023/03/21)


 戦闘画面背景の色調を変更するプラグインによって、背景の暗転演出を行います。通常の色調変更とは異なり、バトラーやアニメーションの色調を維持します。


<D-Motion>
plugin = NRP.ChangeBackColor 128 128 128 15
</D-Motion>

// 好きなように定義
<D-Animation/>

// アニメーション終了を待って実行
<D-Motion:delay>
plugin = NRP.ChangeBackColor 255 255 255 15
</D-Motion>

 プラグインの使用方法はリンク先を参照してください。
 簡単に言うと、最初の3つの数値は背景の赤緑青の順になっています。
 0だと黒、255だと変化なしですね。
 最後の15は変化にかかる時間です。60で1秒となります。

 ※サンプルの記述はあくまで暗転部分だけです。中身はご自由にどうぞ。
 ※2020年にも暗転のサンプルは作成していましたが、こちらはNRP_ParallaxesPlus.jsで作成した遠景にも対応している点と、時間を指定できる点が異なります。


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