RPGツクールMZ 並列処理入門 タイマー脱出・ヒント表示・朝昼夜切り替え

当ページのリンクには広告が含まれています。

RPGツクールMZの並列処理を使えるようになると、ゲーム内でできる表現がかなり増えます。

並列処理は、イベントを実行している間もバックグラウンドで動き続ける処理です。イベントエディターのトリガーから指定でき、コモンイベントのトリガーとしても選べます。トリガーになるスイッチをオンにしておけば、どのマップからでも並列処理を呼び出せます。

この記事では、次の3つの例で並列処理の使い方を見ていきます。

  1. 自動で時間帯を変える・歩数を計測する
  2. ヒントを目立たせる(びっくりマークの表示)
  3. 10秒以内に脱出する(タイマーイベント)

1. 並列処理と通常イベントの違い

まずは、並列処理と通常イベントの違いを押さえておきます。

通常イベントは、イベントが終わるまでプレイヤーの操作が止まります。一方で並列処理は、イベントが動いている間もプレイヤーが移動できます。

1-1. 通常イベントは処理が終わるまで動けない

決定ボタンで実行する通常イベントでは、イベントの実行中にメニューを開けません。十字キーを入れても移動できず、イベントがすべて完了するまで待つ必要があります。

たとえば、夜になってまた朝になるようなイベントを通常イベントで作ると、その処理が終わるまでプレイヤーは動けません。

1-2. 並列処理はバックグラウンドで動く

並列処理の場合は、画面の色が変わっている間も移動できます。バックグラウンドで処理が動いているため、イベントの実行中でもプレイヤーの操作を受け付けるわけです。

違いをまとめると、こうなります。

通常イベント並列処理
実行中の移動できないできる
メニュー操作できないできる
処理の繰り返しなし下まで到達すると上から再実行

2. 自動で時間帯を変える・歩数を計測する

RPGツクールMZのプレイ画面で歩数表示とびっくりマークのヒントを並列処理で表示している例

並列処理の基本例として、時間帯の自動変化と歩数の計測を作ります。

どちらも「プレイヤーが操作している間に、裏側でずっと更新される」処理です。

2-1. 時間帯を自動で変える

RPGツクールMZのイベントエディターで画面色調変更とウェイトを並列処理で組んだ例

イベントのトリガーに並列処理を指定し、画面の色を通常、夕暮れ、夜の順に変えます。

90秒ウェイトすると夕暮れになり、さらに90秒ウェイトすると夜になります。並列処理は最後まで到達するとまた上から実行されるため、天気や時間帯がずっと変わり続ける処理になります。

ここに「時間帯」という変数を組み合わせると、表現の幅が広がります。朝は1、夕方は2、夜は3というように変数を変えておけば、街に入る時に昼のマップ、夕方のマップ、夜のマップを切り替えることもできます。

ドラクエでよくある、時間帯によってイベントの内容が変わる仕組みも、この考え方で作れます。

2-2. 歩数を計測する

歩数の計測では、変数の操作で「歩数」という変数を作り、ゲームデータの歩数を代入します。

ゲームデータには、歩数のほかにも戦闘の勝利回数、敗北回数、セーブ回数などがあります。今回はその中から歩数を使います。

この変数の値を、プラグインのテキストピクチャーで画面に表示します。テキストを `\V[34]歩` とすると、変数34番の数字の後ろに「歩」が表示されます。

並列処理で毎秒この歩数を更新すれば、歩くたびに画面上の数字が増えていきます。これが並列処理の基本的な使い方です。

2-3. 並列処理を重くしすぎない

軽い処理なら問題ありませんが、重たい処理をずっとバックグラウンドで動かすと、画面が重くなる原因になります。

たとえばゾンビ物で銃を撃つゲームを作るとします。銃を構えている時と下ろしている時で主人公のグラフィックを変える程度なら、おそらく大きな問題にはなりません。

ただし、右を向いている時、左を向いている時、上を向いている時で全部画像を変える。さらに銃を向けた時に敵の画像もまとめて変える。そういった処理を並列処理で同時に行うと、ゲームが重たくなる可能性があります。

テストプレイで画面が明らかに重くなった場合は、どの並列処理が原因になっているのかをデバッグで確認してください。

3. ヒントを目立たせる

次は、プレイヤーに「次はこの人に話しかければいい」と伝えるためのびっくりマーク表示です。

並列処理と条件分岐を組み合わせると、進行状況に応じてヒントを出し分けられます。

3-1. ベースになるイベントの流れ

ベースになるのは、以前のゲームスイッチ入門で作ったイベントです。

  1. カプロちゃんに話しかける → 「ボスを倒してきてくれないか」
  2. 「はい」を選ぶ → ボスへの道が開くスイッチがオン → 岩がなくなってボスと話せる
  3. ボスを倒す → 「ボスを倒した」スイッチがオン
  4. カプロちゃんに報告 → 報酬(ポーション)をもらう

この流れに合わせて、次に話しかける相手へびっくりマークを表示します。

3-2. 並列処理でびっくりマークを表示する

RPGツクールMZの吹き出しアイコン表示コマンドで対象キャラとびっくりマークを指定する画面

並列処理のトリガーで、条件分岐を使いながら吹き出しアイコンの表示を行います。

吹き出しアイコンの表示は、イベントコマンド2ページ目の「キャラクター」にあります。対象キャラクターを選べるので、次に進めるべきイベントがどのキャラなのかを指定できます。

今回は吹き出しアイコンの中から、びっくりマークを使います。「完了までウェイト」にチェックを入れると、びっくりマークが出た後にまた上から処理が繰り返されます。

条件の考え方は次の通りです。

  • ボスを倒す前 → カプロちゃんにびっくりマーク
  • ボスを倒した後 → カプロちゃんにびっくりマーク(報酬をもらう必要がある)
  • 報酬をもらった後 → どこにもびっくりマークを表示しない

条件分岐を使うことで、次のイベントがどこにあるのかを分かりやすくできます。

3-3. 会話中のびっくりマークをスクリプトで消す

RPGツクールMZの条件分岐で会話中判定と進行状況に応じた吹き出し表示を分ける画面

会話中までびっくりマークが出続けると、少し邪魔になります。

そこで条件分岐の中でスクリプト(JavaScript)を使い、メッセージウィンドウが表示されている時はびっくりマークを出さないようにします。

“`javascript
$gameMessage.isBusy()
“`

これで、メッセージウィンドウが表示されている時と表示されていない時を分岐できます。

スクリプトを使うと、イベントコマンドだけでは作りにくい条件分岐も扱えるようになります。気になる場合は、少しずつ調べながら使ってみるといいでしょう。

4. 10秒以内に脱出するイベント

最後は、ゲームでよくある「10秒以内にゴールまで来てね」というイベントです。

タイマーが0になると「間に合わなかったか」と表示してスタート地点に戻します。間に合った場合は「お疲れ様」と表示してスタートに戻します。

使うイベントは、スタートイベントとゴールイベントの2つです。

4-1. スタートイベントは自動実行で始める

スタートイベントは自動実行で行います。

処理の流れは次の通りです。

  1. BGMの保存:BGMが変わる前のBGMを保存しておく。後でBGMの再開コマンドで元に戻せます。
  2. BGMの演奏:戦闘っぽい音楽を流す。
  3. プラグインコマンド(MPPイージングスクロールマップ):ゴール地点にカメラをスクロールして見せた後、プレイヤーの場所に戻す。木星ペンギンさんのプラグインで、指定した座標に向けて直線的にマップスクロールできます。
  4. タイマーの操作:イベントコマンド1ページ目の「ゲーム進行」にあるタイマーを10秒で開始する。
  5. イベントスタートスイッチをオン:2ページ目の並列処理に移動する。

4-2. 並列処理でタイマーを監視する

RPGツクールMZの条件分岐ダイアログでタイマー0分0秒以下を指定する画面
RPGツクールMZの並列処理ページでタイマーを監視しMISSスイッチをオンにするイベント画面

2ページ目は並列処理にして、タイマーが0秒になったかどうかを条件分岐で見ます。

条件分岐の1ページ目の一番下にタイマーがあります。ここで0分0秒以下になったら、イベントミスのスイッチをオンにします。

4-3. タイムアップ時は自動実行に移す

RPGツクールMZの自動実行ページでタイマー停止と失敗処理をまとめたイベント画面

イベントミスのスイッチがオンになると、3ページ目の自動実行に移動します。

ここでは、タイマーの停止、失敗BGM、「間に合わなかったか」の表示、スタート地点への場所移動、スイッチのオフを順番に行います。最後にスイッチをすべてオフにして、1ページ目に戻します。

4-4. ゴール到達時は最初にタイマーを止める

ゴールイベントでは、一番最初にタイマーの停止を行います。

その後に、クリアBGM、「お疲れ様」の表示、BGMの再開、最初のマップへの移動を行います。

ここで大事なのは、ゴールイベントの冒頭でタイマーを止めることです。

4-5. ゴール冒頭でタイマーを止める理由

並列処理はバックグラウンドで実行され続けます。タイマーを止めないままゴールイベントを進めると、会話イベントの途中で0秒になってしまうことがあります。

すると、クリアBGMが流れて「お疲れ様」と表示しているのに、失敗扱いの処理も走ってしまう。こういうバグが起きます。

回避方法は2つあります。

  • イベントの冒頭でタイマーをオフにする(推奨)
  • イベントエンドのスイッチをオンにして並列処理のページをスキップさせる(タイマーが表示されたままになるので不格好)

基本的には、ゴールイベントの冒頭でタイマーを止める方法が安全です。

4-6. タイムアップ処理を別ページにする理由

タイマーが0になった時点で、2ページ目の並列処理の中でそのまま失敗処理をすればいいのでは、と思うかもしれません。

ただし、並列処理のまま失敗処理を行うと危険です。

  • セーブができてしまう(メニューが開ける状態のまま)
  • プレイヤーが動けてしまう(「間に合わなかったか」が出るまでの間に移動できる)
  • ゴールに話しかけてクリアできているのに、また最初からになる挙動が起きる

これは、並列処理が「移動している間もバックグラウンドで動く」性質を持っているために起こるバグです。

そのため、時間切れになったらスイッチをオンにして、別ページの自動実行へ移します。自動実行中は移動できず、メニューも開けません。タイムアップ後のようにプレイヤーを止めたい処理では、この形が安定します。

まとめ

RPGツクールMZの並列処理は、プレイヤーが動いている間にも裏側で処理を続けたい時に使います。

通常イベントと並列処理の違いは、次の通りです。

  • 通常イベント:実行中は移動できない。メニューも開けない。
  • 並列処理:実行中に移動できる。メニューも開ける。バックグラウンドで処理が続く。
  • 並列処理は便利ですが、処理中にもいろいろな行動ができてしまう点に注意が必要です。本来は止まってスタートに戻る場面でゴールできてしまう、というようなバグが起きます。
  • 並列処理の内容を多くしすぎると画面が重くなるため、テストプレイで確認しましょう。
  • タイマー系イベントでは、ゴール冒頭でタイマー停止し、失敗処理は自動実行の別ページにするのが安全です。

並列処理は、裏でずっと動く便利な仕組みです。ただし、便利なぶん「プレイヤーが動ける状態のまま処理が進む」ことを忘れると、意図しないバグにつながります。

まずは時間帯の切り替えやヒント表示のような軽い処理から使い、タイマーイベントのような場面では自動実行との役割分担を意識すると扱いやすくなります。