開発日誌

テクニック

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] ルビ表示プラグインを大幅機能拡張

2026-01-19 19:11:23

過去に公開した「ルビ表示プラグイン(PANDA_RubyText.js)」の機能を大幅に拡張しました。

旧バージョンとプラグイン名は同じであり、機能的にもアップデートであるため、旧バージョンを利用されていた方も今回の新しいバージョンに差し替えれば、そのままお使いいただけます。

ただし、独自のUI要素に合わせて改造されていたりした場合には、プラグインパラメータの再設定が必要になる場合もあります。念のため、旧バージョンのプラグインファイルをバックアップしておいてから新しいバージョンに差し替えて、支障が出ないか確認の上でご利用ください。

なお、テキスト表示周りの仕様が異なるため、前回に引き続きRPGツクールMZ専用のプラグインとなります。

2026-01-23追記:「選択肢の表示」の高さ調整に対応しました。

ルビプラグインの基本機能

この「ルビ表示プラグイン(PANDA_RubyText.js)」は、RPGツクールMZが発売された1ヶ月後くらいに公開したかなり古いものですが、拙作プラグインの中でも非常に好評いただいているプラグインです。

具体的には{漢字|かんじ}のように、ルビ(ふりがな)を振りたい文字を{ }で囲んで、|の手前に漢字、後ろにルビを記述すれば、ルビ付きのテキストとして表示されるようになります。

この手軽さと、「文章の表示」によるメッセージテキストだけでなく、アクター名、職業名、スキル名、アイテム名、敵キャラ名、およびスキルやアイテムの説明文や、戦闘メッセージ、マップ名など、必要と思われる場所は基本的に全てルビ表示に対応している点で、非常に便利なプラグインとなっていました。

今回の拡張機能

そんな便利なプラグインでしたが、不満がないわけではありませんでした。

今回、その不満点をできる限り解消し、Version 2としてアップデートしました。

フォントサイズ変更時の不具合修正

メッセージの表示では制御文字の\{\}\FS[n]でフォントのサイズを変えることができます。

行の途中でフォントサイズを変えた時、本来は文字が行の高さの中央揃えになるべきところ、このルビプラグインを導入していると上辺に揃ってしまうという不具合がありました。

自分ではフォントサイズの変更を使うことがなかったので気付きませんでしたが、ギャグテイストの作品では多用される傾向にあります。

新バージョンではその挙動を改善して、ちゃんと文字が行の縦中央に揃うようになりました。

▲ フォントサイズを変えてもちゃんと縦中央に揃うようになった

ルビの字間調整

例えば{不死身|ふじみ}のような漢字3文字に対してルビ3文字の場合、これまではルビが漢字3文字の中央に寄ってしまい、あまり見栄えが良くありませんでした。

{不|ふ}{死|じ}{身|み}のように1字ずつ設定すればいいのですが、かなり面倒です。

新バージョンでは、プラグインパラメータの「ルビの字間調整」をONにすると(デフォルトでON)、漢字に比べてルビの文字数が少ない時に、ルビの字間を適宜調整して、中央に寄りすぎないようにしてくれます。

地味に気になっていた部分なので、今回キレイに調整できたのがよかったです。

▲ 「不意打ち」や「可能性」のルビがいい感じに調整されている

ルビのない行の高さ調整

旧バージョンは、ルビが有効なウィンドウでは常にルビ分の高さを確保するため、アイテムやスキルでルビを含まない名前の場合、文字が項目枠の下に寄ってしまって見栄えがよろしくありませんでした。

そこで、プラグインパラメータの「ルビ無しの行高さ調整」をONにすると(デフォルトでON)、ルビを含まない項目の表示では、ルビ分の高さを確保せず通常の高さで文字を表示するようにしました。

もともとは、ルビのある項目とない項目とで文字の縦位置が異なるのは気になるかと思い、旧バージョンではそれを調整していませんでした。ですが実際に調整してみたところ、項目同士がかなり離れているため高さの違いはそこまで気にならず、逆にアイコンと縦位置が揃うことで見栄えがきれいになりました。

なお、「文章の表示」によるメッセージや、戦闘ログの表示、アイテムやスキルの説明欄など、文章を表示するウィンドウでは、行によって高さが異なると違和感があるため、この調整は反映されません。

2026-01-23追記
当初は「選択肢の表示」で出る選択肢も調整が無効でしたが、Ver.2.0.1で高さ調整に対応しました。

▲ ルビを含まない項目も選択肢の縦中央に配置される

ルビ有効/無効の設定方法

旧バージョンではデフォルトでルビの表示は無効になっており、特定のウィンドウのみ有効にする方式をとっていました。

▲ 旧バージョンでは縦位置調整がないためコマンド項目が下に寄ってしまう

これは、前述の「ルビ無しの行高さ調整」が旧バージョンにはなかったため、全てのウィンドウでルビを有効にしてしまうと、タイトル画面のコマンドウィンドウなどルビが不要なウィンドウでは、項目名が枠の下辺に寄ってしまって見栄えが悪いという理由でした。

しかしこの方式だと、標準以外のプラグイン等で追加されるウィンドウについては、プラグインを改造しない限りルビが有効になりません。

Window_***.prototype.isRuby = function() {
  return true;
};

という感じに、該当ウィンドウにisRuby関数を作成してtrueを返すようにするだけなので、書き換えは比較的簡単にしてありましたが、スクリプトが得意でないユーザーにとっては敷居の高いものでした。

今回、「ルビ無しの行高さ調整」の実装で項目名の見栄えも解消したこともあり、全てのウィンドウにおいてデフォルトでルビを有効にしました。

これにより、プラグインで追加したカスタマイズのウィンドウについても、特に改造なしでルビが自動的に有効になります。

特定のウィンドウではルビを無効にしたい場合は、プラグインパラメータの「ルビ無効ウィンドウ」で当該ウィンドウクラス名を指定します。

以下のウィンドウはほとんどのケースでルビが不要と思われるため、デフォルトで無効対象にしています。もし有効にしたい場合は、指定を削除してください。

  • Window_NameEdit(名前の入力欄)
  • Window_NameInput(名前の文字選択欄)
  • Window_DebugRange(デバッグ画面の範囲指定欄)
  • Window_DebugEdit(デバッグ画面のスイッチ・変数一覧)

注意点として、ウィンドウクラス名はWindow_StatusBaseなどの継承元の上位クラスではなく、Window_MenuActorなどの下位クラス名で指定する必要があります。上位クラス名を指定しても、そこから継承される下位のウィンドウがルビ無効になるということはありません。

なお、旧バージョンと挙動を同じにすることもでき、その場合はプラグインパラメータの「デフォルトでルビ有効」をOFFにし(デフォルトはON)、「ルビ有効ウィンドウ」でルビ有効にしたいウィンドウクラス名を指定します。

「ルビ無効ウィンドウ」と「ルビ有効ウィンドウ」で同じウィンドウクラスが指定された場合は、無効の方が優先されます。

戦闘画面のアクター名

現状、標準の戦闘画面におけるアクターステータスのみ、ルビ表示に対応していません。

理由は、このウィンドウのみコアスクリプト上の文字描画方法が異なるためです。

顔グラフィックに文字が被っているため、無理にルビを表示させても見づらくなるのと、アクター名は他の場所でも頻繁に目にするため、ここでルビがなくても大きな支障はないことから、無理に対応させる必要性は薄いと判断しました。

戦闘のUIはカスタマイズされることも多く、それによってはアクター名も支障なくルビが表示できる場合もあるかと思います。

▲ 戦闘画面のアクター名のみルビ非対応

ルビ振りの歴史

当サイトではもう15年前の和風探索RPG『天下御免!からくり屋敷』の制作初期からルビを振るシステムを実装しており、これまでも「RubyでRubyを…」、「ツクールでルビを振る」、「RPGツクールMZでルビを振る」と、数多くの記事を公開してきました。

昨年末から、新作の中華風探索RPG『蟠桃会(ばんとうえ)異聞~仙界の宴』(仮題)の制作に取り掛かっています。今回は中華風ということで『天下御免!からくり屋敷』同様、漢字の難しい固有名詞が多数登場する予定です。やはりルビが必須となるため、既存のルビ表示プラグインで気になっていた部分や要望のあったところを改善し、大幅な機能強化版として公開することができました。

ルビがあれば少々難しい言葉も躊躇せず使えて、文章の格を落とさずに済みます。実況プレイでもルビがあれば漢字が読めずに詰まるということがなくなるので安心です。和風や中華風の作品に限らず、積極的にとり入れて損はないと思いますので、ぜひご利用ください。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 画像・音声・アニメーションのラグを改善

2026-01-12 22:08:29

RPGツクールMZにおいて、画像・音声・アニメーションを先読み(プリロード)し、表示・再生時のラグ(遅延)を軽減するプラグインを公開しました。

キャッシュの仕組みがMZとMVとで異なるため、本プラグインはRPGツクールMZ専用となります。

※ 2026-01-13追記 テストコードが残っていたので修正しました。

※ 2026-01-18追記 「敵キャラの変身」でエラーが出る不具合を修正しました。最新バージョンはVer.2.0.4です。

過去に「画像先読み改善プラグイン(PANDA_ImagePreLoad.js)」として似たようなプラグインを公開していますが、画像だけでなく音声(BGM/BGS/ME/SE)やアニメーションの先読みにも対応した、拡張版となります。

キャッシュと遅延

テストプレイ時やダウンロード版の場合はローカルから読み込むため、特にラグ(遅延)が気になるということはありません。

一方、PLiCyなどブラウザ版でプレイする場合は、画像や音声ファイルをサーバーからダウンロードしてくる必要があります。そのため、ファイルサイズが大きい場合やサーバーが混雑している場合は、表示・再生時のラグが顕著に発生します。

一度読み込んだファイルはブラウザの機能としてキャッシュされるため、次からは遅延なく表示・再生されますが、最初は一定のラグが生じます。特にサーバーが重い場合は、かなりの遅延になることもあります。

RPGツクールMZの先読みの仕組み

RPGツクールMZのコアスクリプトには、ラグを軽減するための仕組みが標準で備わっています。

過去の記事でも詳しく書いていますが、RPGツクールMZのデフォルトシステムでは、イベントの開始時にイベントコマンドの先頭から200行目までを走査して、その中に登場する「文章の表示」の顔グラフィック画像と「ピクチャの表示」のピクチャ画像を、先に読み込むようになっています。

事前にファイルを読み込んでキャッシュしておくことにより、実際に画像を表示する際に素早く表示できる仕組みになっています。

しかしながら、イベントコマンドが200行を超えるような場合、途中で200行目以降を追加で先読みするといったことはないため、長いイベントの場合は途中からラグが目立つようになってしまいます。

また先読みされるのは「文章の表示」の顔グラフィックと「ピクチャの表示」のピクチャ画像だけなので、それ以外の画像や音声、アニメーションなどは別の方法で事前に読み込むしかありません。

画像先読み改善プラグイン(PANDA_ImagePreLoad.js)の限界

過去に公開した「画像先読み改善プラグイン(PANDA_ImagePreLoad.js)」は、デフォルトの仕組みを改善し、任意の行数(イベントコマンド全行も可)を対象に先読みできるようになり、また先読み対象のイベントコマンドも「遠景の変更」と、「移動ルートの設定」の中の「画像の変更」に対応しました。

これはかなり画期的なプラグインでしたが、「アクター画像の変更」や「タイルセットの変更」など、全ての画像ファイルには対応していなかったのと、音声ファイルやアニメーションにも未対応だったため、これで万事解決というわけには行きませんでした。

リソース先読みプラグイン(PANDA_ResourcePreLoad.js)

そこで今回、画像ファイルのダウンロードを要するほぼ全てのイベントコマンドと、音声・アニメーションの先読みにも対応した拡張版を、作成・公開しました。

具体的には以下のイベントコマンドに対応しています。

頭に*が付いているのが今回新たに追加されたコマンドです。旧プラグインにあった機能は全て、今回の新プラグインにも含まれています。

  • 「文章の表示」で使用される顔グラフィック
  • *「メンバーの入れ替え」で加えられたアクターの各種画像ファイル
  • 「移動ルートの設定」中の「画像の変更」で使用される画像ファイル
  • *「移動ルートの設定」中の「SEの演奏」で使用される音声ファイル
  • *「アニメーションの表示」で使用されるアニメーション
  • 「ピクチャの表示」で使用される画像ファイル
  • *「BGM/BGS/ME/SEの演奏」で使用される音声ファイル
  • *「戦闘BGM/勝利ME/敗北ME/乗り物BGMの変更」で使用される音声ファイル
  • *「アクターの画像変更」で使用される各種画像ファイル
  • *「乗り物の画像変更」で使用される画像ファイル
  • *「タイルセットの変更」で使用される画像ファイル
  • *「戦闘背景の変更」で使用される画像ファイル
  • 「遠景の変更」で使用される画像ファイル
  • *「敵キャラの変身」で変身後の敵キャラの画像ファイル
  • *「戦闘アニメーションの表示」で使用されるアニメーション

先日の記事「ブラウザプレイでBGMと演出のズレをなくす方法」の時はまだ本プラグインがなかったので、「タイルセットの変更」など一部機能は工夫して対処が必要でしたが、今回のこのプラグインで「タイルセットの変更」にも対応しました。遅延対策がより簡単にできるようになったので、ぜひご利用ください。

プラグインコマンド

また、イベント開始時の自動的な先読み以外にも、任意のタイミングで任意の画像・音声・アニメーションを個別に先読みできるよう、プラグインコマンドも各種用意しました。

イベント開始時の先読みだけでは対応できないケースなど、必要に応じてお使いください。

プラグインコマンドはそれぞれ以下のようになっています。

画像先読み
/img/フォルダ以下の任意の画像ファイルを先読みします
タイルセット先読み
指定したタイルセットの画像ファイルを先読みします
音声先読み
/audio/フォルダ以下の任意の音声ファイルを先読みします
アニメーション先読み
任意のアニメーションを先読みします
先読み行数指定の廃止

以前のプラグインは、先読み対象の行数をデフォルトの200行から、プラグインパラメータで指定した任意の行数に変更するという仕様で、行数を0と指定すると全ての行が対象になるというものでした。

あまりに長いイベントの場合は全行読み込みにすると、イベント開始時に先読みの時間がかかりすぎてしまうための仕様でしたが、実際にこの制約に引っかかることは稀で、ほとんどの場合が全行先読みにしていると考えられることから、行数の指定は廃止し、常にイベントコマンドの全行を開始時に走査する仕様に改めました。

これによってプラグインパラメータの指定が不要になり、単純に導入するだけで使えるようになりました。

ただし、本当に膨大なイベントであったり、大量のリソース先読みを必要とするイベントの場合には、事前読み込みの処理に時間がかかってしまう可能性もありますので、ご注意ください。

プラグイン更新の際の注意点

もともとは「PANDA_ImagePreLoad.js」というプラグイン名でしたが、画像だけでなく音声やアニメーションにも対応したことで「Image」では誤解を招くため、プラグイン名を「PANDA_ResourcePreLoad.js」に変更しました。

プラグイン名の変更により、「画像先読み」のプラグインコマンドを使用している場合は、プラグインコマンドの再設定が必要になります。

「画像先読み」のプラグインコマンドを使用していない場合は、そのまま今回の新プラグインに置き換えが可能です。

プラグインコマンドの使用が数カ所の場合も、今回の新プラグインの方が高機能なため、なるべく置き換えをお勧めします。その場合、お手数ですがプラグインコマンドは新しいプラグインのもので再設定をお願いします。

「画像先読み」のプラグインコマンドを大量に使用しており、全て修正するのが現実的でない場合は、旧プラグインと新プラグインの併用も可能です。併用による実害はないはずですが、イベントコマンドの走査や画像の読み込みを二度行うことになるため、多少重くなることがあり得ます。なお、併用する場合は必ず今回の新プラグインの方を後にしてください。

未対応事項とまとめ

前提としてそのイベント内のリソースを先読みするものであるため、戦闘で出現する敵キャラの画像や、戦闘行動で使用するスキルのアニメーションなどを先読みする機能はありません。

またキャッシュの仕様上、移動先のマップデータを先に読み込むとか、次に起動するイベントの内容を事前に読み込んだりといった機能もありません。

デフォルト機能以外の、立ち絵の自動表示やUI関連の表示なども特に対応していないので、プラグインコマンドによる先読みを適宜利用して工夫してください。

イベントコマンドの「ムービーの再生」も、動画ファイルはファイルサイズが大きく、先読みするとかえって重くなる可能性があるため、対応していません。

このように未対応の機能はいくつかありますが、現実的なラグ対策としては十分な機能を備えていると考えています。ぜひ導入していただき、快適なプレイ体験を提供してください。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] ブラウザプレイでBGMと演出のズレをなくす方法

2025-12-09 00:00:06

本記事は「ゲーム制作アドベントカレンダー(旧ツクールアドベントカレンダー)Advent Calendar 2025」12月9日分の投稿記事です。

今年2025年はついに、5年にわたって制作してきた長編大河RPG『王国の英雄』を完成させ、公開しました。

今回は、その時にエンディングのイベントを作った経験から、エンディングの演出でよくある、画面上のキャラの動きとBGMとをシンクロさせる時の注意点とその対処法について解説します。

エンディングに限らず、BGMと演出を同期させるようなシーンで役立ちます。

またブラウザプレイで顕著ですが、ダウンロード版でも多少の遅延は発生しうるので、対策するに越したことはありません。

BGMと演出の同期

エンディングでよくある演出が、メッセージを表示せずキャラの動きだけでシーンを連続して見せるような演出。これまでの冒険の回想や主人公たちのその後の様子などが、いわゆる「人形劇」で次々と流れていく演出です。

この時、BGMの盛り上がりや転調のタイミングが演出とシンクロしていると、とても印象的に映ります。

しかし、どんなにタイミングをバッチリ合わせたとしても、バックグラウンド処理の影響や画像等の読み込みの遅延により、微妙にズレが発生します。

制作時は自分のPCのローカル環境でテストプレイするためなかなか気付きませんが、スペックの低いPCでプレイした場合や、特にPLiCyなどブラウザプレイの場合には、顕著な遅れが出てしまいます。

そういうのを「気にしない」というのも一つの方法ですが、せっかくBGMと演出とを合わせたのなら、その状態で見てほしいものです。それにBGMが微妙にズレていると、遅延のせいとは知らないプレイヤーには「残念」と映ってしまうでしょう。せっかくの苦労が水の泡になってしまいます。

ではどうすればいいのか? 可能な限りズレを解消する方法について解説します。

エンディングでよくある演出と言っていますが、それ以外でもオープニングやその他、BGMと動きがシンクロするようなシーン全般で使えるテクニックです。拙作『王国の英雄』でもエンディングのほか、オープニングムービーや三人娘のダンスショーのシーンなどで用いています。

▲『王国の英雄』のダンスショーシーン、BGMとダンスを合わせている

なお、通常の「文章の表示」で台詞を表示させる場合、制御文字の\^で自動メッセージ送りをしていない限りは、プレイヤーの操作によってタイミングは全く変わってくるので、そもそもBGMとの同期には合いません。ご注意ください。

早送りの禁止

まず忘れてはならないのが、RPGツクールに標準機能として備わっている、早送り機能の無効化です。

イベント中に決定キーを押しっぱなしにしていると、メッセージが早送りされるのはもちろん、各キャラの動きも倍速になります。しかしBGMまでは倍速では流れないため、どんどんズレていってしまいます。

そこで、決定キー押しっぱなしによる倍速化機能を、該当シーン中は無効化しておく必要があります。

この早送りの無効化は、イベントコマンドではできないので、プラグインに頼ることになります。

同様の機能を持つプラグインは多数ありますが、拙作プラグイン「イベント早送り無効化プラグイン(PANDA_DisableFastForward.js)」でも高速化のON/OFFが簡単に切り替えられます。

スイッチを一つ用意してプラグインパラメータで指定し、該当シーンの直前でそのスイッチをONにし、終わったらOFFにすれば、該当シーン中は早送りができなくなります。

画像の先読み

次に必要なのは、画像の先読み(プリロード)です。

ローカルの環境ではほとんど気にはなりませんが、ブラウザプレイ環境の場合、サーバーやネットワークに起因する画像の読み込みの遅延は顕著に起こります。

ツクールには使用する画像ファイルをキャッシュしておく仕組みがあります。過去記事「画像の先読みを改善して画像表示のラグ解消」で紹介したように、RPGツクールMZではイベントの開始時にそのイベントで使用される画像をあらかじめ読み込んでキャッシュする仕組みになっています。

しかし、キャッシュが効くのはイベントコマンドの200行目までに登場する画像となっており、長いイベントだと途中からキャッシュが効かなくなってしまいます。エンディングのイベントなどは長くなりがちなので、この影響を顕著に受けます。

それを改善するのが、上記の記事で紹介している拙作「画像先読み改善プラグイン(PANDA_ImagePreLoad.js)」です。

このプラグインを導入すると、200行という制限が解除されるほか、通常では先読み対象にならない「遠景の変更」や「移動ルートの設定」中の「画像の変更」も対象になります。

※ 2026-01-13追記
画像だけでなく音声ファイルやアニメーションにも対応したほか、後述の「タイルセットの変更」にも対応した拡張版のプラグイン「リソース先読みプラグイン(PANDA_ResourcePreLoad.js)」を公開しました。今後はこちらをご利用ください。

1つのマップに全て収める

意外と盲点なのが、マップ間の移動を行うと、マップの読み込みが走って遅延が生じる点です。

連続で回想シーンを流すような演出の場合、各回想シーンごとに1つのマップで構成し、場所移動と自動実行イベントでシーンを繋いでいくことが多いですが、そのような構成にすると、マップ移動の際にマップの読み込みが行われ、そこで遅延が発生します。

▲『王国の英雄』エンディングのマップ、1マップに全シーンを詰め込んでいる

それを防ぐためには力業ですが、そのシーンで使用するマップを、全て1つのマップに収める方法です。

同一マップ内の場所移動であればマップの読み込みは発生しないので、1つのマップ、1つの自動実行イベントに全てのシーンを収めます。そうすれば解決します。

次のマップをプリロードするプラグインなども存在しますが、さらにその先のイベント内での画像の先読みなどもあるため、1つのマップに押し込めてしまうのが最も手っ取り早いです。

ただその場合、タイルセットの異なるマップを1マップに統合する際は、場所移動時の暗転中にイベントコマンドの「タイルセットの変更」で切り替えてやる必要があります。

先述の「画像先読み改善プラグイン」は「タイルセットの変更」によるタイルセット画像のプリロードには対応していないため、イベント冒頭でフェードアウト中に「タイルセットの変更」を行って、キャッシュに保存しておく必要があります。

※ 2026-01-13追記
先述の「リソース先読みプラグイン(PANDA_ResourcePreLoad.js)」では「タイルセットの変更」にも対応しています。今後はこちらをご利用ください。

ウェイトで時間調整

そして、ここが最大のポイントです。

上記の対策を行っても、PCのバックグラウンドでの処理などの影響により、秒単位以下の遅延は生じます。これはブラウザプレイに限らず、ローカルの環境でも起こりえます。

1~2フレーム(1フレーム=1/60秒)の遅れならまだしも、それが累積して数フレーム以上の遅れになると、BGMとの同期に明らかなズレが見られます。

その時の対策として有効なのが、ウェイトで時間調整をする方法です。

この手の演出を作る場合、たいてい数十フレームから2~3秒程度のウェイトが入ります。このウェイトの長さが数フレーム短くなったところで、基本的に演出には影響がありません。

そこで、ウェイトの時間を調整してBGMのタイミングを合わせるのです。そうすれば、数フレームのズレが起きていたとしても、ウェイトのところでズレが解消されるため、結果としてズレを最小限に抑えることができます。

RPGツクールのコアスクリプトでは、AudioManager.saveBgm().posで現在のBGMの再生位置を秒数で取得することができます。この値が一定値になるまで、1フレームずつのウェイトをループ処理で繰り返し、一定値になったらループを抜けるようにすれば、ウェイトで時間調整が可能です。

具体的には、まず以下のようにして、ちょうど良いタイミングにおけるBGMの再生位置を取得します。

◆ウェイト:90フレーム
◆変数の操作:変数A = AudioManager.saveBgm().pos * 1000
◆文章:なし, なし, ウィンドウ, 下
:  :\V[1]

再生位置の数値の単位は秒ですが、実際の値はフレーム単位まで取得されるため、返される値は小数点以下の値になります。そのままだとイベントコマンドで扱いにくいので、1000倍して整数で扱えるようにしています。

ちょうど良いタイミングにおけるBGMの再生位置が取得できたら今度は以下のようにして、その位置になるまでループするようにします。

◆ウェイト:45フレーム
◆ループ
 ◆変数の操作:変数A = AudioManager.saveBgm().pos * 1000
 ◆条件分岐:変数A < 57500
  ◆ループの中断
 :分岐終了
 ◆条件分岐:変数A >= 58650
  ◆ループの中断
 :分岐終了
 ◆ウェイト:1フレーム
:以上繰り返し

全体のウェイトが90フレームとして、半分の45フレームは必ず入れるようにします。これがないと、遅延が激しかった時にウェイトがなくなってしまうため、それはそれで演出として違和感が出てしまいます。どのくらい強制ウェイトを入れるかは、半分くらいを目安に感覚で構いません。

再生位置の値は1/60フレーム単位=16.66…と端数が出るため、適当にキリの良い値に切り捨てて、その値よりも現在の再生位置が大きければ、ループを抜けてウェイトを終了するようにしています。ぴったりの値にすると、誤差で1フレームズレる可能性があります。

また、BGMがループすると再生位置は0にリセットされます。そのため、何らかの理由で大幅に遅延し、BGMが周回遅れになっていると、BGM1周分に近いウェイトが発生することになります。しばらく動きが止まることになって、それはBGMとのズレ以上に不自然なため、そういう場合は同期を諦めて、再生位置が一定値以下だった時も即座にループを抜けるようにしています。

こういった調整を、ある程度の長さのウェイトがあるところで何カ所か仕込んでおけば、途中で遅延が発生してもすぐに解消されます。

フォーカス喪失対策

RPGツクールの、というかPCアプリケーション全般の仕様として、そのアプリ(ゲーム)のウィンドウがフォーカスを失ってアクティブでなくなると、画面の更新は停止する一方、BGMは再生され続けます。そのため画面の動きとBGMに著しいズレが生じます。

これは特に、全画面表示をせずにマウスで操作をしていると、弾みでウィンドウ外のところをクリックしてしまったりして起こりがちです。そのほか、スクリーンショットを撮ろうとして別のアプリを立ち上げたりすると起こります。

それへの対策プラグインも存在します。

mattuup様の「音声強制停止プラグイン(MAT_AudioFocusResume.js)」を導入すると、ウィンドウがアクティブでない時にBGMの再生を停止できるようです。

また逆に、はどはど様の「H2A_DontPauseWhenBlur」を導入すると、ウィンドウがフォーカスを失っても動きが停止しないようにできるようです。

『王国の英雄』ではここまでは導入していないのですが、気になる場合は導入すると完璧でしょう。

最後に

重要なシーンでキャラの動きとBGMとをシンクロさせるのは、かなり労力がかかりますが、きれいにハマると印象に残ります。

しかし、それが環境によってズレてしまうとなると、せっかくの労力がもったいないばかりか、ズレのせいで逆に残念な演出になってしまいます。

特にPLiCyをはじめとするブラウザプレイでは遅延によるズレが顕著なため、今回挙げた対策は非常に有効に働きます。また、ダウンロード版でも多少のズレは発生するため、対策しておいて損はないはずです。

せっかくの手間が無駄にならないよう、さらにもう一手間加えることで、完璧なシーンに仕上げましょう!

では、最後まで読んでいただき、ありがとうございました。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 対象が無条件のスキルを正しく使わせる

2025-11-30 17:20:25

対象範囲が「味方単体(無条件)」のスキルを敵キャラや自動戦闘のアクターが使うと、ツクールのコアスクリプトの不具合のせいで正常に動作しない問題を解決するプラグインを公開しました。

「無条件」の設定自体がRPGツクールMZからの登場なので、MZ専用のプラグインとなります。

RPGツクールMVまでは、スキルの対象範囲に生存者か戦闘不能者(死亡者)のどちらかしか選べませんでした。しかし、RPGツクールMZで範囲指定のUIが改良され、対象陣営が味方の場合に限り、生死にかかわらず対象にできる「無条件」の指定ができるようになりました。

これにより、戦闘不能なら蘇生、生きていれば回復といった、便利なスキルが作れるようになりました。

しかし、こうしたスキルを通常のプレイヤーキャラクターが使う分には問題ないものの、敵キャラや自動戦闘のアクターに使わせようとすると正常に動作しません。

自動戦闘のアクターが使った場合は、生存中の味方しか対象候補にならず、戦闘不能の味方に使うことはありません。また敵キャラが使った場合は、ターゲットを取得できず何も起こりません。

これはRPGツクールMZのコアスクリプトで、こうしたケースが想定されていないことによる不具合のようです。

過去記事「敵の蘇生対象がランダムにならない不具合修正」でもそうでしたが、どうもツクールのコアスクリプトは敵が蘇生を使うという想定がされていないようで、これもそれと似たような現象です。自動戦闘についても、無条件ターゲットがMZからの追加機能であるため、おそらく対応が漏れているものと思われます。

公式フォーラムでこの問題が投稿されていたため、それに合わせて修正プラグインを作成しました。本プラグインを導入するだけでこれらの不具合が解消し、敵キャラや自動戦闘キャラも意図通りにスキルを使用できるようになります。

確かに「全体無条件」ならともかく、「単体無条件」のスキルは作る機会が多くないかもしれません。しかもそれを敵キャラや自動戦闘キャラに使わせることは、さらに例が少ないでしょう。

しかし、そのような設定が可能である以上、コアスクリプト側もそれに対応しておかなければならないはずで、仕様策定の難しさを改めて感じさせられます。

なお、プラグインに関する質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] イベントの早送りを無効化する

2025-11-23 18:36:13

指定したスイッチがONの時は、決定キーの押しっぱなしによるイベントの早送り(倍速化)が無効になるプラグインを公開しました。

RPGツクールMV/MZ両対応です。

RPGツクールには、決定キーを押しっぱなしにしていると、イベントが倍速で進む早送り機能があります。

メッセージが瞬間表示されるほか、キャラクターやピクチャの移動なども倍速で処理されるようになるため、テストプレイ時や一度見たイベントをもう一回見ることになった時などに便利です。

しかし一方で、エンディングなどでクレジットを表示している時や、キャラの動きとBGMとをシンクロさせている時など、早送りされては困るケースも存在します。

そのような時に、このプラグインが役立ちます。

使い方は簡単で、まずスイッチを1つ用意します。

次にプラグインパラメータでこのスイッチを「(早送り)禁止スイッチ」として指定します。

そして、早送りされたくないイベントの開始前にこのスイッチをONにし、終了後にOFFにします。

これだけでOKです。

なお「文章のスクロール表示」だけは、標準で「早送りなし」の機能があるため、本プラグインの対象外です。スクロール表示で早送りを禁止したい場合は、「早送りなし」のチェックを入れてください。

それ以外の全てのイベントコマンドおよび戦闘ログは、このプラグインによって高速化が無効になります。

プラグインに関する質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。