RPGツクールMZ・レーザートラップの作り方
レーザートラップの記事が結構反響があったので、
どなたかのお役に立てればと、
作り方を残しておきたいと思います。
イベントを発火させるだけならノープラグインで出来ますが、
これはあくまで自分が考えて作ったやり方で、
他に良い方法とか上位互換版がありましたら教えてください!
レーザーの配置をイベントで一つずつ入れていきます。
交差するレーザーの置き方が一番悩ましくて、
同じ場所に二つ以上のイベントの配置は出来ないので、
自分はうまく被らないように配置させました。
基本的には右側も左側も作り方は同じなので、
左側をベースにご説明します。
このレーザーは上下に動きますが、画像の①と②で挙動が少し異なります。
赤枠の部分にレーザーがぶつかった時に①が消えるためです。
■全体共通
イベントのベースは全てほぼ一緒です。
画像が違うだけで、共通して同じ内容です。
大事なのは『すり抜け』のチェック、
移動タイプが『カスタム』になっていること、
あとはプライオリティは『通常キャラと同じ』になっていることです。
『イベントから接触』になっていますが、正直ここは関係ありません。
プライオリティはキャラの上にしがちですが、
そうすると天井の上にレーザーが来るのでおかしなことになります。
■①のカスタムルート
動きは全てカスタムルートで制御します。
上記は①の動きですが、壁にぶつかって消失するので、
そこには『透明化ON』を入れ、壁から抜けた時に『透明化OFF』を入れます。
■②のカスタムルート
②も①と同じ感じですが、肝なのは①と同じ位置に透明化処理を入れ、
しかも全部を『透明化OFF』にすることです。
全部透明化OFFなら入れる意味ないじゃん、と思いがちですが、
実は透明化処理を入れるとその分少しウェイトが入るため、
入れたものと入れていないもので位置が少しずつズレていってしまうんです。
そのズレを解消するために、『透明化OFF』を入れます。
透明化ONもOFFもかかるウェイトは同じのため、
①と②の透明化処理の数を合わせることで、位置ズレを防ぐことが出来るわけです。
これで移動の処理は完了です。
次に、レーザーが主人公に当たった時のイベント発火処理を作ります。
実はイベントの見た目とイベント発火は全く連動していなく、
ちゃんと処理を入れないと
レーザーが当たってないのに主人公が燃えた!!
のようなことになってしまいます。
この処理はイベントの位置を変数化し、また、プレイヤーの位置も変数化し、
その二つの変数の数字がイコールになった時に(イベントとプレイヤーが重なった時に)
イベント発火、という仕組みを取っているのですが、
最初はイベントの数だけ変数を用意しなければならないのか……?
と思っていました。
が、そんなことしなくても出来ました!
後になって『右のキャラをベースに作れば良かった』と失敗したと思いましたが、
最初は画像のEV041のイベントをベースに作っていました。
■各位置の変数化
変数化はこんな感じです。
適当な場所にイベントを作り、『並列処理』にして、
プレイヤーとイベントの位置を変数に変換します。
(EV042とEV026はマップ右側の処理なので本件には関係ありません)
■発火処理
これが一番難解な箇所です。
イベントとプレイヤーが重なった時にイベント発火させるだけなら簡単なんですが、
今回のレーザートラップは
複数のイベントと重なった時に発火させないとなりません。
それで自分が取った方法。
プレイヤーとイベントのY軸処理はイコールだが、
X軸処理は=ではなく≧にする!
そうするとどうなるかというと、こうなります。
Y軸はイベントとプレイヤーの位置が合わさった時に発火しますが、
X軸はイベントより右側にプレイヤーがいればどこまででも発火します!
画像の赤い範囲が発火範囲になります。
でもこれだとレーザーキャラがいる右側も発火してしまうので、
それを制御するために、条件分岐に『プレイヤーのX軸≦31』を入れます。
そうすると、イベントの位置~X:31の場所までが発火範囲になります!
壁のブロックさえ無ければ、これだけで完成になります。
Y軸的にはプレイヤーとイベントのY値が合った時、
X軸的にはEV041~X:31(レーザーキャラの位置)ということで、
左から右まで全てのイベントの位置で発火することになります。
最後に、レーザーが壁に当たって消えた場所(=安全地帯)は
イベント発火をさせない処理です。
これは画像の赤枠部分が該当します。
X軸とY軸で座標指定して、そこに該当する箇所はイベント発火をしない、
それ以外の箇所全てでイベント発火をする、
という形を取ればOKです!
Y:97、X:22、X:27は画像のこの位置、
ちょうどその範囲がレーザーが消えている範囲になります。
そこだけ処理を何も入れず、
それ以外のところでイベント発火をするようにすれば、
レーザーが消えた範囲以外の全ての場所で発火させられる、
という形が取れるわけです!
自分で長々と書いていてこの説明で分かるだろうかと
半信半疑ですが、
この作り方がどなたか一人にでも刺さればいいなと思います。