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

2020年03月28日

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

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

 前提として、DynamicAnimationの基本的な使用法を把握している想定です。そうでない場合は、リンク先の上のほう(到達フレーム(arrival)辺り)だけでも見ていただけると分かりやすいかと思います。

 ※当ページのサンプルは『DynamicAnimation ver1.04以降』推奨です。さらにプラグインパラメータに『lookCourse』型テンプレートが追加されている必要があります。(参考:テンプレート定義一覧

 矢はツクールMVの標準素材にはありませんが、弓の攻撃パターンに含まれています。アニメーションとして使えるように抜き出してみました。ついでに弓から矢を取り除きました。
 ※ツクールシリーズの規約によりMVの正規ユーザ以外は使用できません。

アニメーション(img/animations)
※刺さるパターンつき

武器(img/system)
※右上の弓以外はそのまま

 これで矢のアニメーションを作成すれば準備完了です。
 作成といっても動きはプラグインで制御するため、単に画面中央にパターンを貼りつけるだけでOKです。
 サイズは初期状態だと小さすぎるので、150%ぐらいに拡大したほうがいいかもしれません。


 例では1〜4フレームは1パターン目、5〜8フレーム目は2パターン目(刺さったほう)となるようにしてみました。

目次




 まずは普通に矢を放ちます。
 通常攻撃として使いたい場合は、公式プラグインの『WeaponSkill.js』で武器に紐付ければ可能です。武器を持たない敵キャラはどうするのかという問題はありますが……。


<D-Motion:attack/>
<D-Animation:shot&lookCourse>
sx -= 10 * mirroring // 始点X座標
sy += 10 // 始点Y座標
arrival = 4 // 到達フレーム
</D-Animation>

 始点位置や到達フレームは各自の設定に合わせて変更してください。適当にヒットエフェクトもつけていますが、その辺はお好みでどうぞ。

連射


 連射です。ひたすら矢を放ちます。


// 10連射(モーション)
<D-Motion:attack>
repeat = 10 // 繰返回数
interval = 1 // 間隔

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

// 矢
<D-Animation:shotRandom&lookCourse>
repeat = 10 // 繰返回数
interval = 1 // 間隔

sx -= 10 * mirroring // 始点X座標
sy += 10 // 始点Y座標
arrival = 4 // 到達フレーム
</D-Animation>

 ただ『矢』を繰り返しているだけですね。
 『repeat』の値を変更すれば、矢の本数も変わります。その際、モーションとアニメーションの『repeat』と『interval』の値を一致させるようにしてください。

アローレイン


 矢を上空に放ち、雨のように落下する矢で攻撃します。
 矢のアニメーションは12フレームで対象へ刺さるように変更しています。滞空時間があるため、長めにしたほうが自然となります。


// 弓を引く
<D-Motion:attack>
repeat = 40
interval = 1/2
motionFrame = 1/2/3 // interval/3
</D-Motion>

// 矢連射
<D-Animation:arcRandomAll&lookCourse&wait>
repeat = 40
interval = 1/2
sx -= 10 * mirroring // 弓に位置を合わせる
sy += 10 // 弓に位置を合わせる
eyRandom = 130 // 終点Y座標ランダム幅
arrival = 12 // 到達フレーム
arcY = -500 // 放物線の高さ
</D-Animation>

 『eyRandom = 130』は標準よりも終点Y座標のランダム幅を狭めるためです。標準値だと背景上方の空間に刺さってちょっと変な感じでしたので。

ウインドダート


 風の矢を連射します。
 軌道は高さランダムの放物線を取ります。
 さらに魔力(mat)が20増加するごとに矢の本数が増えます。


 ちなみに風の矢は以下のように作成しています。(クリックで拡大)
 8フレームで対象へ到達する想定です。
 風の矢以外でも、炎の玉でも何でも構いません。


// 弓を引く
<D-Motion:attack>
repeat = 10 + Math.floor(a._battler.mat / 20)
interval = 2
motionFrame = 2/3 // interval/3
</D-Motion>

// 風の矢連射
<D-Animation:shotRandom&lookCourse&wait>
repeat = 10 + Math.floor(a._battler.mat / 20)
interval = 2
sx -= 20 * mirroring // 弓に位置を合わせる
sy += 10 // 弓に位置を合わせる
exRandom = 50
eyRandom = 50
arrival = 8 // 到達フレーム
arcY = -150 + Math.random() * 300 // -150〜150
</D-Animation>

  • 『lookCourse』テンプレートによって、矢は常に進路を向きます。
  • 『Math.floor(a._battler.mat / 20)』は魔力を20で割って、切捨します。
  • 『Math.random()』は0〜1のランダム値を生成する関数です。
    これによって、放物線の高さをランダム化しています。
  • 『Math.random()』は0〜1のランダム値を生成する関数です。

針千本(2020/4/9)


 敵の周囲から出現する大量の矢が突き刺さります。


// 連射(モーション)
<D-Motion:attack>
repeat = 15
interval = 1
motionFrame = 1/3 // interval÷3
</D-Motion>

// 矢(収束アニメ)
<D-Animation:converge&lookCourse>
repeat = 60
interval = 1/4
exRandom = 20
syRandom = 20
arrival = 4 // 到達フレーム
scaleX = 1 + (1 - Math.min(t, arrival) / arrival) * 2
scaleY = 1 + (1 - Math.min(t, arrival) / arrival) * 2

</D-Animation>

 赤字部分で矢の縮小処理を行っています。通常の3倍から等倍へと変化していくような数式になっています。

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

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

2020年03月23日

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

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

目次



爆裂脚


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


 アニメーションには『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/>


ズームアタック DynamicMotion ver1.02(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/05/09修正)


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


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

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

</D-Motion>

// 着地に合わせてアニメーション&ダメージ
<D-Animation:damage>
nextDelay = 7 // 間隔をモーションに合わせる
wait = auto
</D-Animation>

// 最後のアニメーション開始と同時に戻る
<D-Motion:return>
delay = -5 // アニメーションのフレーム数を引く
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.startRandom()
</D-Animation>

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

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

練気拳(単) DynamicMotion ver1.021(2020/04/06)


 ※DynamicMotion ver1.021以降が必要です。
 敵を引きつけながら殴ります。
 スキルには単なる打撃アニメを設定しています。
 さらに吸引用のアニメが必要です。例では『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』はモーション対象者となります。

練気拳(全) DynamicMotion ver1.021(2020/04/06)


 ※DynamicMotion ver1.021以降が必要です。
 練気拳と言えば、そもそも全体技です。もちろんちゃんと用意しています。
 ※元ネタはロマサガ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』は「対象毎にアニメーションを表示する時間差」および「対象毎に行動主体がモーションを実行する時間差」です。

分身剣(2020/04/10)


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


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

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

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

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

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

<D-Motion:return/>

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

変身 DynamicMotion ver1.04(2020/05/10)


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


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

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

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

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

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

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

DynamicMotion その他機能など【RPGツクールMVプラグイン】

2020年03月22日

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

 補足的な機能解説です。いくつかの機能はDynamicAnimationと同一です。

目次


ミラーリング(mirroring)

直接演算

&連結

D-Setting機能

自動前進無効(NoStep)

並列実行(Sync)

不死身制御(Immortal) ver1.04


ミラーリング(mirroring)


 例えば、以下のような定義があるとします。
<D-Motion:near>
ex = b.x + 200 // 終点X座標
</D-Motion>

 対象の右200ピクセルへ移動するというものです。
 ところが一つ問題があります。

 アクターが使用した場合は問題なく対象の正面である右側へ移動します。……が、これを敵が使うと今度はアクターの背中へと移動してしまいます。
 となると、味方なら『b.x + 200』、敵なら『b.x - 200』に定義を切り替えたい。
 そこで、以下の機能を用意しました。
<D-Motion:near>
ex = b.x + 200 * mirroring // 終点X座標
</D-Motion>

 この『mirroring』という変数は対象がアクターの場合に値が-1になります。これをかけることで必要な部分だけを左右反転させられます。
 また、フロントビューなどで上下座標を反転させたいなら、Y座標側に同様の操作をしてください。


 この通り、対象の左へと移動するようになりました。

直接演算


 以下のように指定すれば、テンプレートの設定値に対して直接演算できます。元の値が分からなくとも設定できるので便利です。
<D-Motion:near&jump&roll>
ex += 100 // テンプレートの設定値 + 100
ey -= 100 // テンプレートの設定値 - 100
rotation *= 2 // テンプレートの設定値 * 2
arcY /= 2 // テンプレートの設定値 / 2
</D-Motion>

 なお、これらの演算はJavaScriptの式に対して、『文字列連結』しているだけであることにご注意ください。

 どういうことかというと、テンプレートの設定値が「ex = b.x + 100」だったとします。
 メモ欄の入力が以下の通りだった場合……
<D-Motion:jump>
ex *= 2
</D-Motion>

 連結後の内容は「ex = b.x + 100 * 2」となります。
 つまり、かけ算がかかるのは末尾の100の部分だけってことです。
 全体にかけるにはプラグインの設定値を「ex = (b.x + 100)」のようにしておけばOKです。
 足し算、引き算なら支障ありませんが、かけ算、わり算の場合はご注意を。

&融合


 &記号によりテンプレートの融合が可能です。
 例えば……
<D-Motion:near&jump/>

 と、接近(near)型とジャンプ(jump)型のテンプレートを『&』でつなげることで定義を融合します。ジャンプしながら対象へ向かって接近します。

 実際には、プラグインに登録されたテンプレート定義の値を融合しています。
 注意点として、パラメータが競合する場合は後ろの定義が優先されます。

 どういうことかというと、まずnear型の定義は以下のようになっています。
<D-Motion>
wait = (isSync ? 0 : "autoMove")
ex = defaultX + a.width/2 * mirroring + (position != 3 ? b.width/2 : 150) * mirroring
ey = defaultY + a.height/2
airY = 0
motion = walk // 歩行モーション
</D-Motion>

 対するjump型の定義は以下のようになっています。
<D-Motion>
arcY = -100
motion = wait
</D-Motion>

 両者を融合した結果は以下のようになります。
<D-Motion>
wait = (isSync ? 0 : "autoMove")
ex = defaultX + a.width/2 * mirroring + (position != 3 ? b.width/2 : 150) * mirroring
ey = defaultY + a.height/2
airY = 0
arcY = -100
motion = wait // 待機モーション
</D-Motion>

 near型にあった『motion = walk』の定義が『motion = wait 』で上書きされました。同時に二つのモーションを取れないので当たり前ではありますが、ご注意ください。

 なお、融合できる数に制限はなく、3つ以上も可能です。

D-Setting機能


 メモ欄に記入することで以下の機能を実行できます。
 なお、複数の機能を設定する場合は以下のように記載してください。
<D-Setting:NoStep&Sync>

自動前進無効(NoStep)

 スキル(アイテム)実行時の一歩前進をなくします。
<D-Setting:NoStep>


並列実行(Sync)

 テンプレートに初期設定されたウェイトおよびディレイ命令を無効化します。
 合体技など複雑なタイミング調整を行いたい場合に使用する想定です。
<D-Setting:Sync>

 もっとも、必ずしも無理に使う必要はありません。『noWait』『noDelay』などのテンプレートを活用すれば、これを使わずとも合体技の作成は可能です。使いやすい方でどうぞ。

不死身制御(Immortal) ver1.04

 不死身ステートを使用することで、演出制御を行います。使用するステートはあらかじめプラグインパラメータへ設定してください。
<D-Setting:Immortal>

 これにより、スキルの演出が終わるまで死亡判定がされなくなります。連続ヒット技の最中に相手が死亡して、演出が空振りになることを防げます。

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