はじめに
今回はRPGツクールMZで滑る床・自動で動く床を作る方法を解説。
この記事では下図の動きを「移動タイル」と呼びます。

そして、下図の動きを「滑る床」と呼びます。

下記の3つの作り方を紹介します。
・移動ルートの設定を使う方法
・リージョンタイルを使う方法
・地形タグを使う方法
基本的にやる事は下記の2つです。
・イベントでキャラを強制移動
→ 移動ルートの設定を使う方法
・マップにキャラ移動の処理を仕込む
→ リージョンタイル、地形タグを使う方法
このようなマップがある事を前提に進めます。
※柵はAの上から3、右から2番目のタイルで作成。

マップの作り方はこちらをご覧ください。
3つの作り方の違い
◆移動ルートの設定
→ イベントでキャラを強制的に動かす処理。
狭い範囲や限定的な場所で有効。
1マップの移動するタイル作成向け。
特徴
・処理が軽い
・比較的簡単に作れる
・タイルセットを書き換えない
・マップのイベント数が大量に増える
・別マップで利用不可
◆リージョンタイルを使う方法◆
→ 見えないタイルに移動属性を仕込む処理
広い範囲、複数の場所から滑れる場合に有効
氷のように滑るタイル向け。
特徴
・処理が重い(並列処理を使う)
・作成がやや難しい
・タイルセットを書き換えない
・使用するイベント数は3つ
・滑る操作をコモンイベントにすると、別マップでも応用可
◆地形タグを使う方法◆
→ タイルに移動属性を仕込む処理
広い範囲、複数の場所から滑れる場合に有効
移動するタイルを複数マップに作る時向け。
特徴
・処理が重い(並列処理を使う)
・作成がやや難しい
・タイルセットを書き換えてしまう
・使用するイベント数は3つ
・滑る操作をコモンイベントにすると、別マップでも応用可
移動ルートの設定を使う方法
多分、一番簡単な方法です。
が、分岐が増えるとその分イベントが増えるので滑る床での活用はおすすめしません。
移動タイルを作る
イベント編集モードでマス目を表示。
ペイントソフトで経路を描いて、事前に決めます。

イベント編集モードで、乗ったら動いてほしいタイルをクリック。
Returnキー。

実行内容の◆をクリック。
Returnキー。

2ページ目 → 移動ルートの設定をクリック。

下書きで決めた動きを入れます。
完了までウエイトにチェック。

プレビューで動作確認。

移動開始で移動速度アップ。
移動終了で移動速度を戻します。
OKで確定。

イベント左下を見ます。
・歩行アニメのチェックを解除
・トリガーをプレイヤーから接触に変更

これで、移動タイルの1つ目が完成です。

この処理を必要な分岐の数だけ行います。

イベントをクリック → Ctrl+C でコピー。
次のマスをクリックで選択 → Ctrl+V でペースト。
2つ目のイベントをダブルクリック。

移動ルートの設定をクリックで選択。
スペースキーで編集。

下書きに合わせた移動ルートを設定。

これで、このような動きになります。

同様の手順で、頑張ってこれを設定します。

これでイベントを使った移動タイルが完成です。

⚠ 滑る床を作る
⚠これから紹介する方法は、イベント数が増えすぎるためおすすめしません。
狭い範囲でもこうなります。

マップ編集で障害物を置きました。

この障害物に合わせて移動ルートを組んでいきます。

基本は先ほどと同じです。

これで、滑ってるように見えます。

複数の条件が重なったイベントタイルが出てきました。
これは、実行内容に条件分岐を追加して対処します。
問題のタイルをダブルクリック。

移動ルートの設定を選択 → Returキー。

ページ1 → 条件分岐を選択。

3ページ目 → プレイヤーの向きを設定。
移動内容に合わせて下、左、右、上を選びます。

あとは、条件分岐の中に移動ルートも設定。
※イベントはCtrl+X → 条件分岐内の◆を選択 → Ctrl+Vで中に入れれます。

これを、全ての移動パターンに合わせて作ります。

これで、イベントを使った滑る床が完成です。

サンプルマップ配布
これ以降の処理は並列処理を使うので重くなります。
また、かなりややこしくなります。
そこで、マップのサンプルデータを配布しました。

こちらを見ながら進めると、理解が深まると思います。
サンプルマップの読み込み方
ファイル → プロジェクトを新規作成。

ゲーム → フォルダを開くを選択。

フォルダ → dataを開きます。
先ほどDLした、配布サンプルマップの.zipを展開。
中身をProjectのdataの中に入れて上書き。

RPGツクールMZに戻ります。
「はい」でリロード。

すると、マップのデータが出てきます。
★は私がおすすめする使い方。

手前の看板に簡単な説明があります。
※説明文の★マークは見出しで、すべてについてます。

あとは、処理開始イベントがマップ中央の道にあります。(8,8の座標)
ここを通って動かしてください。

これで、配布サンプルマップが使えます。
左上のイベントを見ると、処理が分かります。
リージョンタイルを使う方法
リージョンタイルとは透明のタイルです。
リージョンタイルから数値取得 → 条件分岐で動作を変えるといった事ができます。
また、リージョンタイルは滑る床向けなのでこちらから解説します。
※動くタイルでも動きますが、複雑になるので後回し。
滑る床を作る
まず、理解してもらいやすいように、
バグが起こりますがもっとも簡単な方法を紹介します。
マップ編集モード → Rを選択。
1のタイルを選択。
滑ってほしい所に塗ります。

後で紹介する、地形タグとの違いを比較する用に、
滑ってほしい所と同じタイルを追加。

この処理は、左上のイベントで並列処理を使い動かします。
並列処理を使うので重いです。(そして、マップ全体に処理がかかります)
なので、必要な時だけ呼び出すようにON/OFFのスイッチを作ります。

ON側のイベントはこのように指定。
プレイヤーからの接触 → スイッチ0001をON。

このONはマップ移動の際に入れることを想定してます。

次に、終了地点このようなイベントを作成。
プレイヤーからの接触 → スイッチ0001をOFF。
これは、マップを出た時の事を想定してます。

最後に画面左上にイベントを作ります。

出現条件にのスイッチにチェック → 0001を指定。

これで、スイッチで処理のON/OFFを切り替えれます。

そしたら、左上イベントの実行内容を書いていきます。
空白の◆を選択 → Returnキー。

3ページ目 → 位置指定の情報取得をクリック。

・変数0001を指定
・変数0001の名前「変数・リージョンID」に変更
・情報タイプ → リージョンIDを選択
・場所 → キャラクターで指定 → プレイヤー

そして、条件分岐で「変数・リージョンID = 1」ならば、
プレイヤーを1歩、滑らせて前進させる処理を作ります。

条件分岐の中身はこちら。

移動ルートの設定の中身はこちら。
・歩行アニメのOFF → ONの処理を追加
・移動できない場合は飛ばすにチェック

これができれば、OKで確定。

イベントエディター左下で、トリガーを並列処理に変更。
OKで確定。

これでゲームを動かすと、滑る床ができます。

が、「マウスで位置指定 → 移動中にキーボードで別方向を入力」
などで、移動するバグが起こります。

これまで紹介した方法は最も簡単ですが、このバグが起こります。

そこで次は、やや複雑になりますが、このバグを治す方法を紹介します。
バグを治して滑らせる方法
左上のイベントを編集していきます。

まず、移動の処理を消しました。
そして、リージョンID=1で「滑ってる状態(速度6)」と「そうでない時(速度4)」を分けました。

こうなっていれば成功です。

次に、ループを追加します。
このループで移動中の入力を無効化します。

ループの中に一歩前進を入れればいい…と思うかもしれません。
が、これでは無限に一歩前進の処理を繰り返します。
結果、固まります。

そこで、止まってほしいマスの1つ先をリージョンタイル2で塗ります。
出入口も書かいた方が安全です。
たまに、2マス移動する不具合が起こったりします。

この、〇の位置で止まる処理を作っていきます。

ループの中で変数の操作を2つ追加し、下記のように設定。
・1つ目の変数は0002を設定。
・変数0002の名前は「プレイヤーの向きX」を設定
・代入(=)で結ぶ
・オペランドでゲームデータ → プレイヤーのマップXを選択。
・1つ目の変数は0003を設定。
・変数0003の名前は「プレイヤーの向きY」を設定
・代入(=)で結ぶ
・オペランドでゲームデータ → プレイヤーのマップYを選択。
変数の名前は、”向き”より”位置”の方が言葉的に正確でした💦
直したい方は直してください。

そして、指定位置の情報取得を追加(3ページ目)
変数0001を設定。
場所を変数で指定。
変数X:で0002、変数Y:で0003を設定。
これで、0001の変数にプレイヤーマップのXとYの情報が分けて入ります。
これだけでは何も変わりません。

そこで、条件分岐 → プレイヤーの向きを設定。
向きに合わせて変数0002と0003の値を±1します。
これで、1マス先のリージョンタイルの値が変数0001に入ります。

1つ目の指定位置の情報取得は、人力で普通に歩いた時のタイルを判定してます。
これは、開始地点だけ有効になります。
2つ目の指定位置の情報取得は、移動処理によって動いた後のタイルを判定してます。
ループの中に入ってるので、移動ごとにタイルの判定が有効になります。
そして、ループの中断が入るまで続きます。

1マス先のリージョンID = 2になった時にループを中断する処理を入れます。

これで、この位置で止まります。

それ以外の時は4方向に1マスずつ進ませます。
不具合対策で移動できない場合は飛ばすにもチェック。

あとは、そもそもリージョンタイルを踏んでない時の分岐を作ります。
これは、移動速度と歩行アニメを戻すだけです。

イベントOFFになるポイントにもこの処理を入れます。
スイッチでOFFになった瞬間、処理が止まって移動速度が戻せなくなる事への対策です。

これで、干渉不可能な滑る床になりました。

この方法の問題点(軽度なバグ)
この方法にも、軽度なバグがあります。
それはマウス操作が若干上手く行かない事です。
クリックを連打しても、反応する時としない時があります。

…これぐらいは仕方ないと思います。
直し方があったら教えてください。
以上で、リージョンタイルを使った滑る床が完成です。
移動タイルを作る
まず、見やすいようにタイルセットとマップを変えました。
(ダンジョンのタイルを使用)

左上に作ったイベントをダブルクリック。

条件分岐のリージョンタイルの変数を
リージョンID ≧ 252に変更。

そして、マップ編集モードで252~255のリージョンタイルに塗り直します。

移動ルートの下書きを確認。
上移動=225、下移動=252、左移動=253、右移動=254のように決めて塗ります。

そしたら、ループ内の条件分岐を作っていきます。
≧ 252は「252~255のリージョンタイルで処理を有効化」という意味。
ループ内で指定するのは、処理が有効化になった場合の移動先のタイル情報です。
先ほど決めた移動番号と合うように=の条件分岐を設定。

最後にリージョンID=0の分岐を作ります。
0=リージョンタイルの指定なしという意味。
ここに「移動速度+アニメを戻す処理」と「ループの中断」の2つを入れます。

これで、リージョンタイルを使った移動する床ができました。

以上がリージョンタイルの使い方です。
地形タグを使う方法
地形タグも考え方はリージョンタイルと同じです。
この番号の属性が見えるタイルに含まれてる物が地形タグ。
基本的に”移動タイル”床向けの設定です。
滑る床にすると、私の技量では取れないバグが出ました。
なのでリージョンと違い、変更すると全てのタイルに影響を与えてしまします。

メリットは、リージョンタイルを塗る手間が減る事ぐらいです。
個人的にはリージョンタイル派ですが、手法の1つなので紹介します。
※分が長くなりすぎるので、リージョンタイルで説明した部分を省いてます。
ここから読み始めた場合は、戻るかサンプルファイルを見て足りないところを補間してください。
移動タイルを作る
地形タグはデータベースで設定できます。

タイルセット → 使ってルセット → 地形タグを確認。

上下左右のタイルに4,5,6,7の番号を割り当てます。
スクショなどを取り記録。

左上のイベントを編集。

左上は並列処理でゲーム全体に処理を回してます。
重くなるので、入口と出口のイベントでON/OFFを切り替えるスイッチを入れてました。

指定位置の情報取得で下記のように設定。
・変数0004を設定
・0004変数の名前に地形タグ(名前)などを入力
・情報タイプ=地形タグ
・キャラクターで指定=プレイヤー

最初の条件分岐で、地形タグ ≧ 4 を指定+「それ以外のとき」を追加。
それ以外の時で歩行アニメON、移動速度4を設定。
これで、地形タグ4,5,6,7でループの処理を発動するようになります。
※ループで動かさないと、キー入力で干渉できるバグが出ます。

あとは下記のように設定
・ループ内でもう一度「指定位置の情報取得」
( ループ内の移動処理で動いた後のタイル監視 )
・ループ内でもう一度「地形タグ ≧ 4」の分岐を作成+それ以外のときを追加。
・それ以外のときループ中断を設定。
・条件分岐4~7で設定した方向に合わせて移動処理を入力

これで、地形タグを使った移動タイルができました。

⚠ 滑る床を作る(バグあり)
この方法はタイルの上で止まるバグが起こります。
なのでおすすめはしません。
また、これまでの記事を読んだことを前提に、サクッと解説します。
技法の参考程度にご覧ください。

データベースを開きます。

滑ってほしいタイルに地形タグ → 7を設定。

そして、設定したタイルで滑ってほしい所を塗ります。

左上のイベントを編集。

これを下図のように設定します。
主な内容はこちら。
・移動干渉バグ対策にループを使って移動
・ループ内で、1つ先にあるタイルから地形タグを取得
・条件分岐≠7で、地形タグが7以外の場合はループが止まる

これで、バグが残りますが、地形タグで動くようになりました。

このバグの由来は、ループを止めるために1つ先の地形タグを見てるのが原因です。
しかし、ループを使わないと移動中に移動を干渉できるバグが起こります。

現状、良い解決法は思いつけません。
思い浮かびましたら追記しますが…
普通に、リージョンタイルを使う事をおすすめします。
バグの対処法(解決はしません)
このバグは解決はしませんが、対処はできます。
どうしても地形タグで滑る床を作りたい場合、
対処法は1つ先のマスまで作る事。

これで、本来止まってほしかった位置で止まります。
※手前の左右移動で真ん中が上手く行かないなど問題は残りますが…。

もっと頭の良い組む方を思いつければ、できるかもしれません。
が、難しいので、とりあえず動くリージョンタイルを使う事をおすすめします。
マップが変わっても処理を継続させたい場合
これまでのリージョンタイル、地形タグを使った方法は左上のイベントで移動を制御してました。

このイベントをコモンイベントに書き換えればマップを超えれます。

データベースからコモンイベントを開きます。

・並列処理
・スイッチ0001を指定
・実行内容にしてほしい処理を書く
・元あった左上のイベントを削除か無効化

これで、マップを超えれます。
まとめ
今回は滑る床、移動タイルの作り方を解説しました。
・作り方はイベント、リージョンタイル、地形タグの3パターンがある
・イベントは狭く限定的な範囲向け
・リージョンタイルは広い範囲の滑る床向け
・リージョンでも滑る床はできるが、実行内容のテキストが長くなる
・地形タグは広い範囲の動く床向け
・リージョン、地形タグの処理はどちらも並列処理を使うので重い
・重さ対策で、スイッチなどでON/OFF切り替えを作る
・マップを超える場合はコモンイベントで動かす
また、他にもRPGツクール関係の情報を発信してます。
ぜひこちらもご覧ください。
コメント