RPGツクールMZの公式プラグイン「ARPGプラグインセット」で遊んでいます。
前回、初代ゼ○ダのような「弾を防ぐ盾」の作成に失敗して諦めてました。失敗談も有意義と思い、記事化のため見直していたら代替案が浮かんで完成。わからないものですね。
判定位置が少しズレてるのと、歩行キャラに盾を被せられなかったのが残念な点です。一応盾も表示したのですが、走るとあからさまにズレるので断念。装備によるグラ変更は厳しそうです。実は見た目装備を変えられるプラグイン、存在したりするのかな?
●盾ガードの考え方~四方に衝突範囲
動的オブジェクトを生成し、四方にヒットボックスを配置、プレイヤーに位置同期させます。当たり判定チェックで衝突したら弾いた音を鳴らして弾を削除。
難なく行ける思ったのですが、動的オブジェクトではヒットボックスが作れませんでした。位置同期もスキルオブジェクトからのみ。それでも何とかこの2点は代替案で解決しましたが、衝突対象のイベントIDが取得できないのは致命的でした。
仕方なく弾側で衝突判定を呼び出し、イベントIDはスクリプトで取得。少しでも手順が減るよう判定はコモンイベントへ。完璧な動きをしてくれるか微妙ですが、それっぽく動いてはいるようです。
●盾オブジェクト生成~
まずはヒットボックスを生成する盾オブジェクトから。拡張セルフスイッチで指定するため<et: shield>でイベントタイプを指定します。続いてエネミー設定で敵オブジェクト化、方向別にヒットボックスを作ります。調整が必要かと思いますが、とりあえず半キャラ分のサイズで作成。カスタムタグも区別するためにそれぞれ別の名前を指定します。
初期化が終わったらイベント2で並列処理。ここでプレイヤーの位置を自分に設定するため、移動ルートの指定でスクリプトを書いています。ページ3にある上級>スクリプトではないので注意。
this._realX = $gamePlayer._realX; this._realY = $gamePlayer._realY;
イベント3で衝突時の処理を設定します。防いだっぽい音を鳴らし、フラグをオフにして判定を再開。盾オブジェクトは以上です。




では、コモンイベントで生成しましょう。動的オブジェクト生成でプレイヤー位置と盾オブジェクトを指定して作成。コモンイベント自体は各マップの左上に配置されている初期化イベントから呼び出します。プレイヤー位置は並列処理でも更新するので、ここでは省略しても大丈夫です。

テストしてF6を押下して盾ガードの衝突範囲を表示します。プレイヤーの四方を緑色が囲っていればOKです。

●盾判定生成
コモンイベントに盾判定を追加します。プレイヤーの方向ごとに当たり判定チェックを呼び出し。判定のパラメータには弾イベントID格納予定の変数と、盾オブジェクト作成時に指定したカスタムタグを指定。ヒットしていたら拡張セルフスイッチ設定を使って弾と盾の「$ヒット検出」をONにし、それぞれの衝突イベントを起動します。



当たり判定チェックのキャラクター指定です。4方向すべて同じです。主体のイベントID(変数指定)は「0023 選択ターゲットイベントID」を指定してください。


●弾消滅
では最後に、弾を削除して完成させます。
火の玉スキルオブジェクトの衝突判定に追加していきます。まずはスクリプトで自分のIDを「0023 選択ターゲットイベントID」に格納。コモンイベント「盾判定」を呼び出して使ってもらいます。結果が「$ヒット検出」に入ってくるので、ONの時にセルフスイッチBをON。イベント3が起動し、火の玉が消滅します。


正面からの弾は防げますが、横や後ろからの弾はダメージを受けます。
自動盾ガード、完成です!
●まとめ
今回は盾ガードを作ってきました。
3つの敵が中々厳しかったです。特に3は一度絶望しました。頭冷やすのは大事ですね。
- 動的オブジェクトからヒットボックスを作れない
- 位置同期はスキルオブジェクトにしかできない
- 衝突相手のイベントIDは取得できない
今回はプレイヤーの盾が1つ、敵の弾が複数。つまり1対多の形だったので何とかなりました。ヒットボックスを作った盾ではなく、弾側でヒットボックスを処理することで、1対1の判定に持っていけました。盾はプレイヤーのものなのでイベントタグで指定しても1つに特定可能。弾は複数ありますが、イベントIDで特定し、そこから当たり判定を呼ぶことで1対1にできます。こうして見ると綱渡りだ、できたなぁ。
あぁ疲れた。でもまぁ、楽しかったのでヨシ!
コメント