背景
RPGツクールMVではイベントの開始条件としてイベントごとに「トリガー」を設定できます。
イベントと衝突したときのトリガーに使うのは「プレイヤーから接触」もしくは「イベントから接触」になりますが、トリガーとして設定できるのは1つだけなので、両方をトリガーとして使いたいケースに対応できません。(例えば動き回っている敵イベントとの衝突であれば、プレイヤからか敵からかに問わず発動してほしいため)
解決策
var switchIndex = 1
if(!$gameSwitches.value(switchIndex)){
if(Math.sqrt(Math.pow(this.character(-1)._x - this.character(1)._x,2) + Math.pow(this.character(-1)._y - this.character(1)._y,2))<0.5){
$gameSwitches.setValue(switchIndex,true)
}
}
このスクリプトを実行するイベントを置いて、トリガを「並列処理」に設定します。IDが-1のイベント(=プレイヤ)とIDが1のイベントとの衝突を判定しています。_x,_yで取得する値は1マスあたり1.0の値になっており、互いの座標が円形で0.5マス以内の距離にあったら衝突しているとみなします。
この例の場合は、衝突した、と判定されたらスイッチ1番をONにしています。これで後は1番のスイッチで自動実行されるイベントなどを置いておくことで衝突後のイベントを実行させます。
この衝突判定は重なっている必要があるので、「すり抜け」を設定したイベント、もしくは、プライオリティを「通常キャラの下」に設定したイベントでないと発動しません。
実際に使ってみて
割りといい感じに当たり判定が行われます。
動き回る敵とプレイヤとの衝突などにも使えますし、シューティングゲームの当たり判定にも使えます。
下記に公開しているゲームで一部この当たり判定を使っているところがあります。よろしければ覗いてみてください。
- Rapid Quest
- ツクールチャンネル (シロガネチャンネルにあるシューティングゲーム)