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

2024年04月18日

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

 ロマン中のロマン――合体系のサンプル技を紹介していきます。
 前提として、以下のプラグインとの併用を想定しています。

 合体技の実現(NRP_CombinationSkill)

 これの導入により『$actor(id)』や『$cs(id)』関数で、合体技に参加するアクターを取得できるようになります。
 また『$css(id)』関数ではスプライトを取得できます。
 ※DynamicAnimation ver1.09より、$cssへの参照は不要となりました。全て$csだけで完結します。

 どうしても記述が複雑になるので、DynamicAnimation&Motionの定義をtxtから読み込むプラグインでテキスト編集すると便利かもしれません。
 ただし、<CS_Actors:1,2>などの記述まで、テキスト内に含まないように気をつけてください。あくまで合体技プラグインの記述なので、このプラグインでは処理できません。

目次



X斬り(2020/11/29更新)


 二人のアクターが交差するように敵を斬ります。


 以下はID=1(アレックス)と2(ブライアン)による例です。
<CS_Actors:1,2>
<D-Setting:NoStep&Sync> // 並列モードで実行

// アレックス:対象の中心を基準に移動
<D-Motion:crash>
performer = $cs(1) // 1: アレックス
ex += 120 * mirroring // 目標から右に120
ey -= 120 * mirroring // 目標から上に120
frame = 5
</D-Motion>

// ブライアン:対象の中心を基準に移動
<D-Motion:crash>
performer = $cs(2) // 2: ブライアン
ex += 120 * mirroring // 目標から右に120
ey += 120 * mirroring // 目標から下に120
frame = 5
wait = 10 // 少しだけ待つ
</D-Motion>

// 二人同時に敵の向こう側まで移動
<D-Motion:pierce&attack>
performer = [$cs(1),$cs(2)] // 二人
ex = defaultX - 120 * mirroring // 対象から左に120
</D-Motion>

// X字アニメーション
<D-Animation/>
<D-Animation:wait>
rotation = Math.PI*2 / 4 * mirroring // 90度回転
</D-Animation>

// 二人で戻る
<D-Motion:return>
delay = 5
performer = [$cs(1),$cs(2)] // 二人
</D-Motion>

 説明すべきことは多々ありますが、一つずつ取り上げていきます。

 二行目にある『<D-Setting:Sync>』は並列実行モード(解説)です。これにより、テンプレートに初期設定されたウェイトやディレイを無視します。
 通常『near』『crash』のような移動系テンプレートは、バトラーの移動を待ちます。このSyncの指定があれば待たなくなります。複数のバトラーを動かす際に便利です。

 『performer = $cs(1)』というのは一番目の参加者をモーション対象とするという意味です。事前説明で設定した関数ですね。

 『performer = [$cs(1),$cs(2)]』というように複数人を同時にモーション対象とすることも可能です。
 ちなみに『pierce』型は角度を保ったまま標的の向こうまで移動します。二人まとめて命令しているのに、別地点へ移動するのはそのためです。便利。

 『X字アニメーション』の部分は角度を変えて『7:斬撃/エフェクト』を二つ再生しています。
 もちろん、普通にX字の斬撃アニメーションを作っても構いません。

 ※2020/11/29 mirroring機能によって敵の使用にも対応しました。
  ただし、<CS_Actors:1,2>の記述は変更する必要があります。
  <CS_Enemys>または<CS_Battlers>を使用してください。


合体魔法剣(2020/04/09)


 魔道士が放った魔法を身に受けて、剣士が魔法剣を放ちます。
 スキルのアニメーションには適当な斬撃をセットしています。


 以下はID=1(剣士)と2(魔道士)による例です。
<CS_Actors:1,2>
<D-Setting:NoStep>

// 剣士:敵の前まで移動
<D-Motion:near>
performer = $cs(1)
</D-Motion>

// 魔道士:一歩前進
<D-Motion:stepForward&wait>
performer = $cs(2)
</D-Motion>

// 魔道士:魔法ポーズ
<D-Motion:svSpell>
performer = $cs(2)
</D-Motion>

// 魔道士:魔法発動アニメ
<D-Animation:spell&wait>
target = $cs(2)
</D-Animation>

// 剣士:手を挙げるポーズ
<D-Motion:svItem>
performer = $cs(1)
</D-Motion>

// 剣士が水を受けるアニメ
<D-Animation:shot&wait>
id = 82
target = $cs(1)
sx = $cs(2).x // 発射するX座標
sy = $cs(2).y - $cs(2).height/2 // 発射するY座標(中央に調整)

arrival = 7
scale = 0.5
</D-Animation>

// 剣士:武器を振る
<D-Motion:attack>
performer = $cs(1)
</D-Motion>

// 敵に攻撃アニメ
<D-Animation/>
<D-Animation:random&wait>
id = 82
scale = 0.5
</D-Animation>

// 魔道士:戻る
<D-Motion:stepBack>
performer = $cs(2)
</D-Motion>

// 剣士:戻る
<D-Motion:return>
performer = $cs(1)
</D-Motion>

 基本的には『X斬り』で説明したことと変わりません。
 『target』の指定でアニメーションの対象を切り替えています。これにより、発動アニメを魔道士に表示したり、剣士に魔法を放ったりしています。
 また『sx = $cs(2).x』『sy = $cs(2).y - $cs(2).height/2』という記述により、魔道士を始点にして魔法を発射しています。

 デフォルトで作りやすかったので今回は『82:水/単体2』を使用しましたが、炎や雷などの魔法剣も同じ用に作ればOKです。

総攻撃(2020/5/2)


 全員で総攻撃をしかけます。


// 全員を合体技の対象に
<CS_Battlers:1,2,3,4>

// メッセージ用(先頭の名前+達)
<CS_UserName:$cs(1).name() + "達">

// 自動前進禁止&非同期
<D-Setting:NoStep &Sync>

// 接近
<D-Motion:near>
performer = $cs() // 全員対象
performerDelay = 2
ey += a.height * (-1.5 + a._battler.index()) // 縦位置調整
frame = 3
wait = 3
</D-Motion>

// 武器振り
<D-Motion:attack>
performer = $cs()
performerDelay = 2
</D-Motion>

// 通常攻撃のアニメーション
<D-Animation>
repeat = 4
id = $cs(r + 1).attackAnimationId1() // 通常攻撃アニメ
interval = 2
wait = 5
</D-Animation>

// 戻る
<D-Motion:return>
performer = $cs()
performerDelay = 2
damageAll = false // 全員が終わるまでダメージ表示禁止
</D-Motion>

 『performer = $cs()』で参加者全員をモーション対象にできます。
 『ey += a.height * (-1.5 + a._battler.index())』はキャラクターの並び順によって、移動先を調整しています。
 『damageAll = false』はreturn型に最初から付属しているダメージ表示機能を切るためのものです。切らないと最初の一人が戻るタイミングでダメージ表示されてしまいます。

 『戦闘行動の強制』辺りと組み合わせて、ペルソナっぽい何かができないかなと思ったり……。

合体魔法(2020/09/07更新)


 複数人で魔法を放ちます。


// 参加者指定
<CS_Actors:2,6>

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

// 全員一歩前へ
<D-Motion:stepForward>
performer = $cs()
performerDelay = 0 // 各人時間差
</D-Motion>

// 全員魔法モーション
<D-Motion:spell>
performer = $cs()
performerDelay = 0 // 各人時間差
</D-Motion>

// 全員発動アニメーション
<D-Animation:spell>
target = $cs()
nextDelay = 0 // 各人時間差
</D-Animation>

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

 上記は二人用ですが、冒頭の<CS_Actors:2,6>の値を変えるだけで、三人でも四人でもそのまま使えます。後はアニメーションを好きなように設定してください。

一斉射撃(2020/5/18更新)


 ※NRP_CombinationSkill ver1.302が必要です。

 全員で一斉に射撃します。
 アニメーションには『82:水/単体2』を縮小したものを設定しています。また<D-Animation:spell>による発動アニメーションも少しいじっています。
 例によって、お好みのアニメーションに変更してください。着弾フレーム(arrival)の値も忘れずに。


<CS_Battlers:1,2,3,4>
<CS_UserName:$cs(1).name() + "達">

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

// 全員一歩前へ
<D-Motion:stepForward>
performer = $cs()
performerDelay = 1 // 各人時間差
</D-Motion>

// 全員魔法モーション
<D-Motion:spell>
performer = $cs()
performerDelay = 1 // 各人時間差
</D-Motion>

// 全員発動アニメーション
<D-Animation:spell>
target = $cs()
nextDelay = 1 // 各人時間差
</D-Animation>

// 一斉射撃
<D-Animation:shotRandomAll>
repeat = 60
interval = 1/2
sx = $cs(r%4+1).x
sy = $cs(r%4+1).y - $cs(r%4+1).height/2
arrival = 7

</D-Animation>

 『$css(r%4+1)』『$cs(r%4+1)』によって合体技の参加者の座標を参照しています。
 『r%4+1』とは「リピート回数(0始まり)を4で割った余り+1」という意味です。つまり『$cs(1)〜$cs(4)』を巡回しながら参照することで、それぞれの位置からアニメーションを発射しています。

ブライアンミサイル(2024/04/18)


 麗しい友情パワーで敵を粉砕します。
 スキルの範囲は全体にしていますが、単体にしても問題ありません。


// 参加者指定
<CS_Actors:1,2>

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

// 1人目:2人目の元へ移動
<D-Motion:near>
performer = $cs(1)
ex = $cs(2).x
ey = $cs(2).y
</D-Motion>

// 1人目:しゃがむ
<D-Motion>
performer = $cs(1)
motion = abnormal
</D-Motion>

// 2人目:上に投げられる
<D-Motion:jump&roll&wait>
performer = $cs(2)
motion = damage
rotation *= 1 // 回転数
airY = - a.height + 12
z = 4 // 優先度上へ
frame = 8
noShadow = true // 影を削除
playSe = {"name":"Wind7","volume":90,"pitch":100,"pan":0}
</D-Motion>

// 1人目:腕を上げてキャッチ
<D-Motion>
delay = -2
performer = $cs(1)
motion = item
motionStartPattern = 1
motionPattern = 1

</D-Motion>

// 2人目:倒れ状態に
<D-Motion>
performer = $cs(2)
motion = dead
wait = 4
playSe = {"name":"Damage3","volume":90,"pitch":100,"pan":0}
</D-Motion>

// 1人目:手を振り下ろす
<D-Motion:swing>
performer = $cs(1)
</D-Motion>

// 2人目:発射
<D-Motion:crash&wait>
performer = $cs(2)
motion = dead
ey = defaultY + 100
airY = 0
noShadow = false // 影を復活
playSe = {"name":"Wind1","volume":90,"pitch":100,"pan":0}
</D-Motion>

// 2人目:倒れたまま
<D-Motion>
performer = $cs(2)
motion = dead
frame = 10
</D-Motion>

// 爆発
<D-Animation>
sy = defaultY + 100
</D-Animation>

// 元の位置へ
<D-Motion:return>
performer = $cs()
</D-Motion>

 abnormalでしゃがみモーション、itemで腕を上げるモーションの代わりにしています。SVアクターの素材によっては不自然に見えるかもしれません。また、itemについてはmotionStartPatternとmotionPatternを同じ値にすることでパターンを固定しています。
 目標とする位置は「defaultY + 100」としています。つまり、本来の対象の位置より少し下を狙っています。不要な場合は+100の部分を削除してください。
 「delay = -2」はタイミング調整です。少し早めに腕を上げることで自然に見せています。
 「z = 4」によって表示優先度を変更しています。投げられる側の優先度を高くすることで自然に見せています。

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