敵攻撃スキルのアニメーション実装に殊の外苦戦した話(戦闘シーンのアニメーションプライオリティ)
こんばんは。
久しぶりにシステム方面のお話です。
今回は敵の攻撃スキルにアニメーションを実装するお話です。
「そんなん普通にデータベースから敵のスキル設定すればええやん」と思うかもしれません(私もそのつもりでいた)。たしかにツクールのデフォ設計そのままのRPGを作る場合はそうなのですが、今回戦闘シーンの立ち絵をコモンイベントで表示させているだけで随分面倒なことになったので、備忘も兼ねて残しておきます。
ちなみに体験版には入っていませんが、敵のスキルはもともと実装したいなーとは考えており、まぁでもこの辺は骨組みじゃなく味付けなので、あらかた完成に近づいてからサクッと付け加えようと思っていたところではあります。
結論
だいぶ話が長くややこしくなったので、最初に結論から書いておきます。
裏側の試行錯誤的なしんどい話にあんまり興味がなければこの項だけサクッと読んであとは読み飛ばすことをおすすめします。
前提:ツクールMZのフロントビュー戦闘では敵から味方へのスキルアニメーションは表示されない
詳しくは後述。
なので敵のスキルにアニメーションを付けたければ
- アニメーションの表示
- 今回の場合プライオリティの設定
の2点をどうにかしてやる必要があります。
戦闘中、 指定座標へのアニメーション表示
データベースに敵のスキルを作り、アニメーションを設定してもフロントビュー戦闘での敵→味方への攻撃では表示されません。
なのでまずはトリアコンタン様のAnimationByPoint.jsプラグインを使って、コモンイベントで敵の攻撃スキルの挙動をダメージまで含めてまるっと用意します。
ダメージまで含めるのは、戦闘の処理が
「データベースで設定されているアニメーション→データベースで設定されているダメージ→使用効果(コモンイベントの内容)」
という順番で処理されるため、ダメージだけスキル側で設定してしまうと、ダメージが入ってからアニメーションが流れる、という不自然な表現になってしまうためです。
なのでコモンイベント内でアニメーション(完了までウェイト)→ダメージ、と処理を自分で記載します。(ただしこれはこれでダメージ数値の画面上への表示などがなくなってしまうなど色々気になるところはある)
※ちなみにこのプラグインの概要欄に
「プラグインの構造上、プライオリティ変更の機能追加はできません。」
という記述があるあたり、私と同様の願いを込めてトリアコンタン様に縋ったツクラーが数多くいたことが伺えますw
お願い公式この辺どうにかしてくりゃれ。
ピクチャのプライオリティ(表示優先度)を調整
さて、アニメーションの表示はこれでできたのですが、本作はツクールのデフォシステムにあるアクターウィンドウではなく、戦闘立ち絵を自分で入れているため、このままだと小夜の立ち絵の奥にアニメーションが表示されてしまいます。
つまり見えません。
そこで、同じくトリアコンタン様のPicturePriorityCustomize.jsプラグインで、小夜の戦闘立ち絵のプライオリティを、アニメーションよりも下に設定します。
本作は20番までのレイヤーを使い分けることで体位・表情・衣服などの切り替えを効率的に管理しているので、20番までのレイヤーを「下層」に設定。
これで小夜の戦闘立ち絵がアニメーションよりも奥に行きました。
動作確認
これであとは敵の攻撃スキルの使用効果として先ほど用意したコモンイベントを、呼び出してあげます。
小夜の戦闘立ち絵よりも手前にアニメーションが表示されています。
- データベースのスキル欄に設定するよりもアニメーションの発生が若干遅い
- ダメージ数値が画面に表示されない
- 画面揺れなどのエフェクトも別途設定する必要がありそう
などUI/UX面でいくつか気になる点はありますが、敵のスキルアニメーションがないよりはマシだと思うので、とりあえずこの方向で進めようと思います。
とりあえずピクチャのプライオリティをいじったので他への影響チェックから始めねば。灯籠とかエロステとかちょっと心配。
試行錯誤メモ
ここからは試行錯誤した時のメモ。
似たようなところで詰まっている方の参考になれば。
※実際はこれ以外にもいくつか試しててだいぶ端折ってる
1.普通に敵のスキルを用意してアニメーションを設定
音だけは聞こえるので、画像レイヤーよりも下に表示されているのかと思った。
この勘違いが随分遠回りになった原因の大部分を占める。
2.コモンイベントを使用してスキルを作る
コモンイベントの中にアニメーションもダメージ処理もエフェクトもすべて閉じ込めて敵のスキルを作ればいいのでは、と。
要はこんな感じ。
しかし思う。
あれ、レイヤー(層)なりプライオリティ(優先度)が選択できない。
というかアニメーションの表示対象(座標)が
- プレイヤー
- このイベント
- (イベントオブジェクト名)
これ、戦闘中に表示することを想定してないヤツでは
案の定。
3. 指定座標にアニメーションを表示するプラグインを使用
トリアコンタン様のAnimationByPoint.js。
スクリプトコマンドでこんな感じに表示するアニメーションと座標を設定して
ダメっすね。
やはりアニメーションは画像レイヤーよりも奥に表示されてしまうらしい。
※ちなみにここでは炎のアニメーションにしてるので、今までと違ってチラッと見えているのがわかりますが、最初は霧のうすーいアニメーションにしていたのもあってコレ気付きませんでした;
4.そもそもの原因に気づく
んで日をまたいで。
ここまで私は戦闘アニメーションが「コモンイベントで出力した画像レイヤーよりも奥に表示されているためアニメーションが見えず音だけ聞こえてくる」のだと思っていました。
なので戦闘シーンのアニメーションの表示レイヤーを操作できるプラグインを探し回っていたのですが、色々検索しているうちに重大な事実に気が付きます。
こちらのプラグインの説明欄
"""
RPGツクールMZのフロントビューにおいて、
敵から味方への攻撃等では戦闘アニメが表示されません。
このプラグインはサイドビューの処理の一部を
フロントビューでも動作させることで、
戦闘アニメが表示されるようにします。
"""
RPGツクールMZのフロントビューにおいて、
敵から味方への攻撃等では戦闘アニメが表示されません。
RPGツクールMZのフロントビューにおいて、
敵から味方への攻撃等では戦闘アニメが表示されません。
え、と思って最初の方法で小夜の立ち絵を表示せずにアニメーションが表示されるか確認
なるほど。
そもそもそっから解決しなければならんのか;
※正確には3番目の方法でのみアニメーションの表示だけはできていたのですが、この辺で1~3の方法を改めて炎アニメーションで試し、ようやく気が付きます。
5.フロントビュー戦闘でアニメーションを表示させるプラグインを試す
ということで、レイヤーやらプライオリティ云々の前に、まずはアニメーションを表示させないと始まらないということがわかり、その方向のプラグインをいくつか試しました。
TorigoyaMZ_DisplayAnimationInFrontView
コマンドが表示されない…ので操作できなくなりました。
よく見ると右下の方に小夜のHPがもう1個表示されていますね。
たぶんなにかのプラグインと衝突しているのでしょう。
戦闘画面のレイアウトをいじるプラグインを使っているのでその辺が怪しい…?
ということでオフにしてみる。
うん…?
ちょっとどうなってるかわかんないですね。
とりあえずコマンドが表示されてないのでダメなのですが、どれと衝突してるのか見当がつかなくなりました。
SuperFrontViewMZ.js
別のプラグインも試してみます。
こちらもフロントビュー戦闘にアニメーションを表示するためのプラグイン。
うぅん…?
別のプラグインでアクターウィンドウを消したり、パーティーコマンドを消したりしているせいでしょうか。
こちらも戦闘画面のレイアウトをいじるプラグインをオフにして試してみます。
お、コマンドの表示まではいけました。
で肝心のアニメーションは表示されるのか。
表示はできた…けど、アニメーションの発生する座標はまぁプラグインの説明通り、画面下のアクターウィンドウ。
まぁ、一歩前進はしましたが道のりは長そうです。
6.そもそもサイドビュー戦闘にすればいいのでは
これ他にも思った方いると思います。
こうなりました。
まぁこれはフロントビュー用のバトルレイアウト使ってるせいですね。
おそらくソイツをサイドビュー用のものに変えれば行けそうですが、この程度のUIですらレイアウトいじりなおすのはだいぶしんどい(というかパラメータが鬼のような数あって、しかも名前見ただけではどれを変えたらどこが変わるのかわからないので、それっぽいのを順番に全部試した)のと、そこまで根幹から変えると影響範囲が巨大すぎて色々怖いので、最終手段として保留。
7.アニメーションのプライオリティではなくピクチャの方のプライオリティを変えればいいのでは
ということで最初に書いた結論に落ち着きます。
というかこの可能性はわりと最初に思いついたのですが、20近くあるピクチャの方のプライオリティを調整するのは厳しいと思っていました。(絶対アニメーションの方のプライオリティ方を調整する方が現実的だろうと思った)
だいぶ長くなってしまいましたがそんな感じです。
これでも記事の方は
- 何が起きて
- 何を思って
- 何を試した
のか、だいぶマシにまとめましたが見てのとおりとっちらかっていますw
試行錯誤している最中の私の頭の中はこんなものではないくらいぐっちゃぐちゃでした(疲弊)
ゲーム、に限らずシステム全般だと思いますが、端から見ると「それくらいの変更すぐに簡単にできるだろ」と思っているところに思わぬ沼があったりします;
そんな感じで、引き続き制作頑張ります;;