どんどんぱふぱふ!
RPGツクールMZ講座始まるよ!
この講座は
アドベントカレンダー用に書いたよ。
他の方の記事もとっても参考になるのでぜひ読んでね!
まだ参加者募集中だから
良かったら
ツクールフォーラムから参加してね!
(枠が埋まり次第終了だよ!)
今日のテーマはこれ!
「
滑る床」
勝手に滑って行っちゃう困った奴。
もう! どっちへ行けばゴールできるの!?
そんな夢多きミニゲームを作れます。
イベントコマンドだけで作るよ。
コモンイベントやリージョンを使うよ!
リージョンを指定して、イベントを一つコピペするだけで
別のマップに複製できたり、同じマップの複数個所に
点在させられる作り方だよ。
「滑る床」とは、足を踏み入れるとつるつるっと滑って
壁や障害物にぶつかるまで強制的に移動しちゃう氷の床みたいなやつです。
いわゆる矢印の方向に強制的に移動する「移動床」とは違うものです。
実際にどういうものか、
サンプルを用意したので遊んでみてね。
※プラウザ上で起動します。
ステップ1 マップを描く
まず、どういうルートを通ってゴールに辿り着きたいかを考え
壁や障害物を配置します。
その後、余分な障害物などを配置します。
適当に配置してから、ルートを考えるのでもいいですけど。
増やしたデコイのせいでクリア不能になったり
逆にやたら簡単にクリアできたり
ということがあるのでご注意ください。
ステップ2 リージョンを指定する
作成例では、2つのリージョンを使ってそれぞれ
滑る床の部分をリージョンID8で塗り
壁や障害物をリージョンID16で塗っています。
ステップ3 最初の一歩のイベントを組む
リージョンID8の床を踏んで、滑る床のエリアに入った時
実行されるイベントを作ります。
このイベントのトリガーは、並列処理に指定します。
プレイヤーの足元のリージョンIDを常に監視し
任意の値になったら、プレイヤーの移動を自動実行します。
滑っている間、歩行アニメを止めたり
移動速度を速めたりもここで行います。
プレイヤーの移動の内容は、2ページ目でも活用するので
コモンイベントに記述し、呼び出すようにします。
最後に、すでに滑る床の上にいますよ、というスイッチをONにします。
◆指定位置の情報取得:リージョンID, リージョンID, プレイヤー
◆条件分岐:リージョンID = 8
◆移動ルートの設定:プレイヤー (ウェイト)
: :◇歩行アニメOFF
: :◇移動速度:6
◆コモンイベント:滑る移動のループ
◆スイッチの操作:#0001 滑る床に入った = ON
◆
:分岐終了
ステップ4 コモンイベントにプレイヤーの移動内容を記述する
プレイヤーの移動自体は、「1歩前進する」を使います。
イベントのループ機能を使い
壁や障害物のあるリージョンID16の床が
プレイヤーの一歩先にある場合は、ループを脱し移動を停止。
それ以外の場合は、一歩進むようにします。
一歩進むごとに条件が更新されていないかをチェックします。
そのために、プレイヤーの現在の座標を取得し
プレイヤーの向きに合わせて、一歩先の座標の位置を計算します。
ループを脱したら、現在の歩数を取得しておきます。
これは次のステップで使用します。
◆ループ
◆変数の操作:#0003 プレイヤーx = プレイヤーのマップX
◆変数の操作:#0004 プレイヤーy = プレイヤーのマップY
◆条件分岐:プレイヤーが右を向いている
◆変数の操作:#0003 プレイヤーx += 1
◆
:それ以外のとき
◆条件分岐:プレイヤーが下を向いている
◆変数の操作:#0004 プレイヤーy += 1
◆
:それ以外のとき
◆条件分岐:プレイヤーが上を向いている
◆変数の操作:#0004 プレイヤーy -= 1
◆
:それ以外のとき
◆変数の操作:#0003 プレイヤーx -= 1
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆指定位置の情報取得:リージョンID, リージョンID, ({プレイヤーx},{プレイヤーy})
◆条件分岐:リージョンID = 16
◆ループの中断
◆
:分岐終了
◆移動ルートの設定:プレイヤー (飛ばす, ウェイト)
: :◇一歩前進
◆
:以上繰り返し
◆変数の操作:#0006 前の歩数 = 歩数
ステップ5 スイッチがONの時のイベントを作る
ステップ3でONにした「今滑る床の上にいますよ」スイッチ。
同じイベントの2ページ目の条件に指定して
トリガーは同じく並列処理にします。
先ほどは、足元のIDが条件でしたが今回は
別の方向に移動したかどうかを監視します。
ステップ4で、取得した「歩数」と、今現在の歩数を比べて
数が違っていれば移動したということなので
移動用のコモンイベントを呼び出します。
さて、移動した先が壁ではなく、出口や入口だった場合
スイッチをOFFにしなくてはいけません。
なので、足元のリージョンIDが16だったら
スイッチをOFFにして、歩行速度やアニメの設定を戻します。
◆変数の操作:#0007 今の歩数 = 歩数
◆条件分岐:前の歩数 ≠ 今の歩数
◆指定位置の情報取得:リージョンID, リージョンID, プレイヤー
◆条件分岐:リージョンID = 16
◆移動ルートの設定:プレイヤー (ウェイト)
: :◇歩行アニメON
: :◇移動速度:4
◆スイッチの操作:#0001 滑る床に入った = OFF
◆イベント処理の中断
◆
:分岐終了
◆コモンイベント:滑る移動のループ
◆
:分岐終了
完成です!
サンプルを用意したので遊んでみてね。
※プラウザ上で起動します。
参考になったらうれしいな。
他にもいろいろな方法があるので考えてみてね!
リージョンが使えるツクールなら、どれでも使える組み方です。
MVでもVXAceでも同じことができると思うよ!
この講座では、説明用として処理を短くするためにカットしたけど
出入口も別のリージョンを割り当てると、もっといい感じになるよ。
ちょっとややこしいとこもあるけど、頑張ってね!
★オマケ★
さて、オマケということで
並列処理は重いから使いたくない! リージョンなんて俺のツクールにはない!
とにかくリージョンがわからないからイベントで作りたい!
という方の為に、イベントのみで作る方法を記述しておきます。
歩ける部分とほぼ同じだけのイベントの数(要するに大量)が必要なので
並列処理とどっちが重いのかは定かではありませんが。
エディタ画面はこんな感じになりますね。
滑る床上のイベントはすべて同じ内容です。
コモンイベントに入れて呼び出す方が修正したい時便利です。
プライオリティは、「通常キャラの下」
トリガーは、「プレイヤーから接触」にしてね。
◆スイッチの操作:#0001 滑る床に入った = ON
◆SEの演奏:Recovery (90, 100, 0)
◆移動ルートの設定:プレイヤー (飛ばす, ウェイト)
: :◇歩行アニメOFF
: :◇移動速度:6
: :◇一歩前進
~滑る床の最大幅(歩数)分、一歩前進を入れる。
移動ルートのオプションで「移動できない場合は飛ばす」に
必ずチェックを入れてください、フリーズします。~
: :◇一歩前進
: :◇歩行アニメON
: :◇移動速度:4
◆SEの演奏:Equip1 (90, 100, 0)
◆スイッチの操作:#0001 滑る床に入った = OFF
出入口のイベントは、スイッチがONの時にだけ
プライオリティ「通常キャラと同じ」で出現させる透明でからっぽの障害物です。
これを置いておかないと、滑る床を脱したのに進めるだけ進んでしまいます。
なぜ効果音を鳴らしているかというと、滑る歩数が短い時に
表面的には歩行が止まったなと思って方向キーを入れても
内部でまだ一歩前進の処理を順番に飛ばしているので
すぐには入力を受け付けてくれず、動かないためプレイヤーが困惑してしまうから
音で「まーだだよ、もーいいよ」とプレイヤーに教えてあげると良いと思いましたです。
ところで、「プレイヤーから接触」してるのになんで上に止まることができるのか
不思議に思った人もいるんじゃないかな?
ここでツクールこそこそ話。
実は、移動ルートのオプションで「完了までウェイト」にチェックを入れてるからなんだよ。
だから、滑る床じゃなくて矢印に沿って自動で動く床を作りたい時は、チェックを外すとよいのさ。
まあ、チェックを入れていても、条件を満たしている間ずっと繰り返すわけではなく
1回実行されれば、移動したりしない限り大丈夫なので
そこが、トリガーと条件の違いっていうわけなんですよね。
例えば、銃の引き金を引いたら弾が発射されるけど、2回目に発射するためには
一回引き金から手を放して引きなおさないといけないでしょ。
(連射できる銃もあるとか突っ込もうとした人、ちょっとここに座りなさい、笑)
ので、滑る効果音いらぬとか、効果音めっちゃ短くて連続再生されても変じゃない
という場合は、床すべてにイベントを敷き詰めて
イベント内容は、以下のように一歩前進を1個入れるだけにすれば
いつでもすぐに入力できるし
出口にイベント置かなくてもいいからスイッチもいらない。
まあ、好きな方でどうぞ。
◆移動ルートの設定:プレイヤー (飛ばす)
: :◇歩行アニメOFF
: :◇移動速度:6
: :◇一歩前進
: :◇歩行アニメON
: :◇移動速度:4
俺のツクールには、一歩前進も、移動できない時は飛ばすもないんや!
という場合は、頑張ってスイッチや条件分岐を駆使してください。
相談には乗るよー。
おしまい!
[4回]