ツクールMVで当たり判定を表示させたい

はいどーもこんばんは、もう9月も半ばですね。
本日はツクールMVで当たり判定を表示させてみたいと思います。
ノリで作ってみたくなっただけなので、「これで何すんの?」とか思っちゃダメです。
「ええからDLさせろ!」という方はGitHubからどうぞ。
https://github.com/Tsumio/rmmv-plugins/blob/master/plugins/TsumioSearchSystem.js

当たり判定ってなんやねん

当たり判定とは「あるオブジェクトとオブジェクトが接触しているか」を判定するためのものです。
その当たり判定を視覚的に表示させてみたいなあと思いました。
僕が想像しているのはUnityのコライダーですが、作ったのはもちろん物理挙動とか関係ありません。
https://docs.unity3d.com/ja/current/Manual/CollidersOverview.html
単に「円状の当たり判定があって、そこに当たると反応する」くらいのもんです。
画像で言う緑色の枠です(画像は矩形ですが)。

作ってみた

というわけで作ってみました。

以下のURLからプラグインをDLしたあと、普通にゲームを起動してください。
https://github.com/Tsumio/rmmv-plugins/blob/master/plugins/TsumioSearchSystem.js
イベントの周り+プレイヤーの周りに緑色の円が表示されてると思います。
接触したら色が変わると思います。あとイベントが実行されます。
一応動画もペタリ(クリックしてもらったら動くと思います)。

全体的な所感

どのようなゲームをターゲットとするか決めずに作り始めたので、かなり荒い作りになっています。
汎用性もないですね(コードのコメントで「ここはゲームによって変えたほうがいいかも」みたいなことちょくちょく書いてますw)。
プロパティ名も悩んでいて、本当は円以外の形状も用意しようとしてたんですが(radiusじゃなくてcolliderSizeになってるのはその名残)、「まあ別にこのプラグイン使う人いなさそうだしな」と思ってそのまま放置してます。
このシステムを使ったゲームをなにか思いついた人がいたら、もう少し丁寧に作る……かもしれません。

工夫した箇所

ModelとViewの分離は引き続き意識しています。
当たり判定の大きさはセーブデータに保存可能です。
あと一気に当たり判定を判断すると重くなるかもなーと思ったので、マップのイベントを4分割して、それぞれ4フレームに1回ずつ当たり判定を取ってます。
厳密な接触判定がほしいならこれじゃダメかもですが、RPGを想定してるならこれくらい緩くても問題なさそうだなと思ってます。
まあそれくらいですかね……。
あんまり考えずに作ったので工夫ってほどのものはないかも。

改善案

以下はぱっと思いついた改善案です。
数学的な知識が必要なものも多く、頭爆発ボンバーなので実装を諦めたものです(調べるのに時間がかかりすぎるのと、使う人がいるかどうかわからない状態でやる気がでなかったw)。

■当たり判定の角度
当たり判定を「キャラの向いている方向を中心として90度くらい」にすると、要は「前方」に対してのみ反応するようになります。
これだと「後ろから接触した場合は反応してほしくない」場合に役に立ちます(例えばプレイヤーが近寄ると反応するシステム。後ろを素通りすることはできても、目の前を素通りすることはできない、とか)。
あるいは「接触した角度を認識し、角度によって反応を変える」くらいの機能を付加してもいいかもしれません。
■障害物を考慮
「円の半径と同じ長さの線分を飛ばし、眼の前に別のイベントがいた場合は障害物ありとしてプレイヤーに反応しなくなる」とか面白そうだなと思いました。
昔こういう感じのシステムで追いかけっこのミニゲームがありました(ゼル伝だったかな)。
■イベント実行のタイミング
現状は「接触したら必ずイベントを実行」しますが、そうしたくない場合もあるかと思います。
あるいは特定の条件を満たした時だけイベントを実行、とかですね。
そのへんの機能も作り込んでいないので、ユーザー的にはちょっと使いづらいかもしれませんねえ。
あとは「接触直後にイベント実行」「接触中は常にイベント実行」「接触が終わった直後にイベント実行」の3つくらいあるといい感じかも(Unityもこんなんです)。
■特定リージョンに対する当たり判定
リージョンごとに接触判定できると便利かもしれないなあと思いつつ実装してません。
■空間分割
イベント数が増えたり、もっと複雑な当たり判定を取る処理を追加したりすると、もしかしたらゲームが重たくなるかもしれません。
そんなときは空間分割するのがよさそうです。
ただこれ作るの普通に難しそうなんですよねえ……。
ウーン。

終わりに

いかがでしたでしょーか。
ちまちました機能ばかり作っていないで、そろそろゲームも作りたいですねえ(ブログのタイトルも「ゲーム作ってみる」ですし……)。

ところで「今年が終わると同時に僕の人生も終わりそうです」というキャッチフレーズを思いついたので、今年の12月あたりに使ってみたいと思いますよ。
ほなそんな感じでまた。

フォローする