# オーバーワールドでの戦闘攻撃？

**URL:** <https://guild.rpgmakerofficial.com/t/topic/2928>\
**Category:** 質問\
**Tags:** mz\
**Created:** [2026 年 9 月 13 日午後 11:17 UTC](https://guild.rpgmakerofficial.com/t/topic/2928 "2026-09-13T23:17:55Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![MHDevBlue](https://avatars.discourse-cdn.com/v4/letter/m/f6c823/32.png) [@MHDevBlue](https://guild.rpgmakerofficial.com/u/MHDevBlue)\
**Post date:** [2026 年 9 月 13 日午後 11:17 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/1 "2026-09-13T23:17:55Z")

</div>

私のゲームでは、オーバーワールドでの戦闘システムを導入したいと考えています。

これまでにほとんどの機能は実装済みですが、敵と_実際に相互作用する_攻撃機能だけが未実装です。この部分の実装方法がわかりません。

オーバーワールドでプレイヤーが敵にパンチを当て、その攻撃が敵に何らかの影響を与えるようにするには、どうすればよいでしょうか？

要するに、オーバーワールドでプレイヤーが「攻撃」キー（この場合はZキー）を押すと、「攻撃」アクションが発動し、敵に接触した際に、敵の種類やプレイヤーの攻撃内容に応じて、即死、ノックバック、ダメージ計算などの様々な処理が行われるようにしたいのです。

---

<div class="post-metadata">

**Author:** ![MHDevBlue](https://avatars.discourse-cdn.com/v4/letter/m/f6c823/32.png) [@MHDevBlue](https://guild.rpgmakerofficial.com/u/MHDevBlue)\
**Post date:** [2026 年 9 月 14 日午前 3:47 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/2 "2026-09-14T03:47:45Z")

</div>

トップに上げます

---

<div class="post-metadata">

**Author:** ![Baz](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/baz/32/100_2.png) [@Baz](https://guild.rpgmakerofficial.com/u/Baz)\
**Post date:** [2026 年 9 月 14 日午後 5:45 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/3 "2026-09-14T17:45:21Z")

</div>

ZはすでにMZではOKに割り当てられているため、並列共通イベントで「条件分岐 → ボタン → OKが押された」を監視すれば、キーを読み取るための追加処理は不要です。

スイングそのものについては、当たり判定を検出しようとせず、代わりにウィンドウを開くことをお勧めします。Zを押すと、「攻撃中」のような名前のスイッチをONにし、プレイヤーにパンチのアニメーションを再生し、スイングの継続時間を待ってから、スイッチをOFFに戻します。どの攻撃が使われたかを記録するため、その直前に別の変数を設定します。

敵イベントが反応を担当します。イベントタッチに設定したページを持たせ、プレイヤーが敵に接触したか、敵がプレイヤーに接触したかをトリガーとして、そのスイッチで分岐します。「攻撃中」がONであればヒットしたことを意味し、ダメージ、ノックバック、または即死処理をその分岐内に記述し、死亡時に自己スイッチをONにします。「攻撃中」がOFFであれば通常の衝突を意味し、この場合はプレイヤーがダメージを受ける処理をここに記述します。攻撃タイプの変数は、同じヒット分岐内で参照されるため、ある敵はパンチを無効化してキックに耐える一方、別の敵はその逆の挙動を示すといったことが可能になります。

パンチはプレイヤーの前方のタイルに到達する必要がありますか？それとも、スイング中に接触すれば十分でしょうか？上記のすべては接触バージョンです。前方に到達させる場合、プレイヤーのX座標、Y座標、および進行方向を変数に格納し、各敵のX座標とY座標と比較する必要があります。これは可能ですが、構成が異なるため、実装する前にどちらの方式が必要かを確認することが重要です。

---

<div class="post-metadata">

**Author:** ![MHDevBlue](https://avatars.discourse-cdn.com/v4/letter/m/f6c823/32.png) [@MHDevBlue](https://guild.rpgmakerofficial.com/u/MHDevBlue)\
**Post date:** [2026 年 9 月 14 日午後 7:16 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/4 "2026-09-14T19:16:19Z")

</div>

うん、ボタンの処理はすべて完了していて、ボタンも正常に機能してるよ。先日からボタンを追加する方法について話していた同じ人だよ、lol。関連する別の問題について新しいスレッドを立てたんだ。

これは非常に賢いアイデアだね！問題は、敵イベントは1ページしか持てないということだ。それは、戦闘前に設定された特定の変数に基づいて、スプライトやステータス、攻撃セットを自動的に設定するからで、新しいページを作るとすべてのコーディングが消えてしまい、再び空白で機能しなくなってしまう。実際にはもう少し複雑で、必要であればさらに詳しく説明できるけど、基本的にはここでは1ページに限定して作業するしかないと思う。

敵イベントは並列プロセスになっており、内部の計算がすべて完了すると、コードの最後で無限ループに入る。使用可能な攻撃をチェックし、HPが0かどうかを確認してループを抜ける仕組みになっている。このループの中に攻撃の反応処理を入れることはできるか？

攻撃は、プレイヤーの正面のタイルに到達する必要があるんだよね。そのためのコンセプトはすでに持っていたけど、それがどれほど良いものかはまだわからない。オフスクリーンに別の並列プロセスがあり、プレイヤーの常に上に異なる透明なイベントを設定し続けている。この透明なイベントが攻撃の当たり判定そのもので、プレイヤーの向きや押されたキーに応じて、プレイヤーの正面のタイルに素早く移動し、その後元に戻る。

---

<div class="post-metadata">

**Author:** ![Baz](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/baz/32/100_2.png) [@Baz](https://guild.rpgmakerofficial.com/u/Baz)\
**Post date:** [2026 年 9 月 14 日午後 7:41 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/5 "2026-09-14T19:41:35Z")

</div>

はい、そして2枚目のページも不要です。すでに設定しているHP0チェックよりも前に配置すると、一撃でループを中断できます（次のフレームを待たずに同じパス内で処理されます）。

追加すべき点はガードです。並列ループでは、当たり判定がそのタイルに固定されている間、毎フレーム同じヒットが再登録されてしまいます。自己スイッチを使えば、ページ構成に触れることなくこれを処理できます：

```auto
◆条件分岐：攻撃中 が ON
  ◆条件分岐：自己スイッチ B が OFF
    ◆変数操作：#0031 ヒットX = キャラクター [当たり判定] のマップX座標
    ◆変数操作：#0032 ヒットY = キャラクター [当たり判定] のマップY座標
    ◆変数操作：#0033 自分のX = キャラクター [このイベント] のマップX座標
    ◆変数操作：#0034 自分のY = キャラクター [このイベント] のマップY座標
    ◆条件分岐：ヒットX = 変数 [自分のX]
      ◆条件分岐：ヒットY = 変数 [自分のY]
        （ダメージ計算、攻撃タイプ変数の参照、ノックバック処理）
        ◆自己スイッチ操作：B = ON
      ◆条件分岐終了
    ◆条件分岐終了
  ◆条件分岐終了
◆else
  ◆自己スイッチ操作：B = OFF
◆条件分岐終了

```

すでに使用していない文字ならどれでも構いません。これは「このスイングはすでにカウント済み」を意味し、Else節でスイング終了時にこれを解除します。

当たり判定イベントを保持する場合、[イベント位置の設定] を使うと、キャラクターのように移動させるのではなく即座に配置されるため、移動ルートで発生するようなブロックや数フレームの遅延を防げます。

もう一つの方向性としては、当たり判定イベントを削除し、敵側でタイル情報を自前で処理させる方法もあります。プレイヤーのマップX座標、マップY座標、進行方向を取得し、進行方向に応じてオフセットを加算します（2はY+1、4はX-1、6はX+1、8はY-1）。そして、その値を敵自身のX座標とY座標と比較します。これは本来行っている比較処理と同じですが、毎フレーム再配置される要素がないため、より効率的です。

---

<div class="post-metadata">

**Author:** ![MHDevBlue](https://avatars.discourse-cdn.com/v4/letter/m/f6c823/32.png) [@MHDevBlue](https://guild.rpgmakerofficial.com/u/MHDevBlue)\
**Post date:** [2026 年 9 月 14 日午後 8:27 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/6 "2026-09-14T20:27:19Z")

</div>

![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/2X/9/932ffea6d9ef7fc2b1566baf9e384b61537a0a44.png)

これで正しいでしょうか？攻撃機能がまだ実装されていないため、自分自身で確認することができません。次のステップとしてそれを実装するつもりでした。

これらの敵イベントが複数存在するため、プラグインの「自分自身の変数」を使用しました。

---

<div class="post-metadata">

**Author:** ![Baz](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/baz/32/100_2.png) [@Baz](https://guild.rpgmakerofficial.com/u/Baz)\
**Post date:** [2026 年 9 月 14 日午後 9:59 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/7 "2026-09-14T21:59:46Z")

</div>

構造は正しそうです。マップ上に複数のコピーがある場合、座標用のセルフスイッチ変数を使用するのは良い選択です。

変更すべき点の一つは、Else ブランチです。ここは B を ON に設定していますが、OFF にする必要があります。このブランチは ATTACKING が OFF の間に実行されるため、フラグをクリアして敵の次の攻撃に備える役割を果たします。現状では、最初の攻撃で B が ON になり、その後決して OFF にならないため、敵はその後の戦闘で一度しかヒットとして認識されません。

```auto
: Else
  ◆セルフスイッチ B の制御: OFF

```

コメントブロックは今の場所に置いておいて大丈夫です。ただし、注意すべきは、それらの3つのブランチはすべて「セルフスイッチ B が OFF」のチェック内に存在するため、フレームごとではなく、攻撃のたびに1回だけ実行されるということです。これは特にノックバック処理で重要で、「動けなくなるまで」の動作は、各パスで再トリガーされるものではなく、Move Route や、自身で完了するループであるべきです。

---

<div class="post-metadata">

**Author:** ![MHDevBlue](https://avatars.discourse-cdn.com/v4/letter/m/f6c823/32.png) [@MHDevBlue](https://guild.rpgmakerofficial.com/u/MHDevBlue)\
**Post date:** [2026 年 9 月 14 日午後 10:14 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/8 "2026-09-14T22:14:06Z")

</div>

おっと、見落としてたよ、そんなことってあるよね。だから俺はくどいほど確認するんだけど（笑）、いつも小さなことで躓いちゃうんだ。

「移動ルートを設定＝後ろにステップして、動けなくなるまで（壁にぶつかるまで）」ってのは、今の文脈では使えないってこと？

---

<div class="post-metadata">

**Author:** ![Baz](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/baz/32/100_2.png) [@Baz](https://guild.rpgmakerofficial.com/u/Baz)\
**Post date:** [2026 年 9 月 14 日午後 10:20 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/9 "2026-09-14T22:20:09Z")

</div>

移動ルートには「壁にぶつかるまで」という終端条件がないため、最も近い代替手段は、「移動できない場合はスキップ」オプションをオンにした「後退」ステップの固定数です。壁に対しては、余分なステップがスキップされ、ルートは自動的に終了します。

現在の文脈で問題となるのは、並列処理内の「完了待機」です。イベント自身のループは、ルートが完了したと報告するまでこのコマンドで待機します。「移動できない場合はスキップ」がオフの場合、壁に阻まれたステップはルートを進行させず、単に再試行します。そのため、壁に押し付けられた敵は、自分のHPを含む他のあらゆるチェックを停止してしまいます。

敵は攻撃を受けた瞬間、プレイヤーの方を向いていますか？「後退」は、攻撃してきた方向ではなく、現在の進行方向の反対へ移動するため、パトロール中の敵がルートのどこで止まっているかによって、横方向に押しやられる可能性があります。

---

<div class="post-metadata">

**Author:** ![MHDevBlue](https://avatars.discourse-cdn.com/v4/letter/m/f6c823/32.png) [@MHDevBlue](https://guild.rpgmakerofficial.com/u/MHDevBlue)\
**Post date:** [2026 年 9 月 14 日午後 10:42 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/10 "2026-09-14T22:42:31Z")

</div>

ええ、まさにそれです。「移動できない場合はスキップ」を選択し、その後、壁にぶつかるまで移動ルートが実行されます。

つまり、並列処理の中に「移動完了を待つ」コマンドを入れると、そのコマンドが終了するまで、並列処理内の他のすべてのイベントに対して優先権を奪ってしまうという問題がある、ということですね？

敵が壁にぶつかった時点で倒れるのであれば、それはそれでカッコいいかもしれません。

それとも、もし他の敵が進行経路を塞いでいる場合、その敵が動くまでそこで停止してしまう、ということでしょうか？ 確かにそれも一理ありますね。おそらく、ノックバックイベントの開始時に優先度を変更すれば解決するかもしれません。

敵はプレイヤーを向いていないと攻撃できませんが、プレイヤーが背後から攻撃した場合の扱いも確かに考慮すべき点です。敵がどの方向を向いているかに関連して、プレイヤーから離れる方向へノックバックさせる方法をどう実装すればよいか、まだ確信が持てていません。

---

<div class="post-metadata">

**Author:** ![Baz](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/baz/32/100_2.png) [@Baz](https://guild.rpgmakerofficial.com/u/Baz)\
**Post date:** [2026 年 9 月 14 日午後 10:52 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/11 "2026-09-14T22:52:07Z")

</div>

これはそのイベントのみに関するものです。並列イベントはそれぞれ独自のインタプリタを実行するため、「移動完了まで待機」は自身が記述されているイベントのみを一時停止します。マップ上の他のすべては動き続けます。

「移動できない場合はスキップ」をオンにすると、ブロックされたステップは再試行ではなくスキップされるため、通路にある別の敵に引っかかることもありません。ルートは残りのステップを次々と実行し、完了として報告します。引っかかるケースは「スキップ」がオフの場合のみです。互いの通過については、クリーンな方法はありません。優先順位はプレイヤーにのみ影響し、イベント同士は関係なく互いをブロックします。また、移動ルート内の「すり抜け」オンは壁も無視するため、壁での停止を壊してしまいます。スキップオンでブロック手前で停止するのは害のない結果なので、そのままにしておけばよいでしょう。

方向については、移動ルートのリストに「プレイヤーから離れる方向を向く」コマンドがあります。これを先頭に配置し、その後に「前方へ移動」を置けば、敵が衝突時にどちらを向いていたかに関係なく、プレイヤーから離れる方向への押し戻しが行われます。これにより最終的にプレイヤーから背を向けた状態になるため、その向いている方向が他の処理に影響する場合は、最後のステップとして「プレイヤーの方を向く」を追加してください。

---

<div class="post-metadata">

**Author:** ![MHDevBlue](https://avatars.discourse-cdn.com/v4/letter/m/f6c823/32.png) [@MHDevBlue](https://guild.rpgmakerofficial.com/u/MHDevBlue)\
**Post date:** [2026 年 9 月 14 日午後 11:15 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/12 "2026-09-14T23:15:08Z")

</div>

ご協力ありがとうございます！敵イベントの仕組みはほぼ理解できたので、今度は攻撃の実装に進みます。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/2X/0/08890d70e935929f7125514936415bf14d72efa5.png)

これが汎用攻撃の処理スクリプトです。

「Attack Collision」は常にプレイヤーに送信されるイベントで、プレイヤーと同じ位置に敵がいる場合、それが敵が攻撃されたことを知らせる役割を果たします（ATTACKING=ONの間）。

「BPlayer X」と「BPlayer Y」は、常にプレイヤーの座標と一致するように設定された座標です。

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/2X/0/0fc13becd8c41a651b5f6aa70827b74447e977d1.png)

これが「Attack Collision」自体の処理スクリプトです。上部に書いたコメントの注意書きを除き、すべてが画面内に表示されています。

これらを考慮した上で、Zキーを押すと効果音が鳴るだけで、それ以外の動作が発生しません。何が問題なのかお分かりになりますか？

---

<div class="post-metadata">

**Author:** ![MHDevBlue](https://avatars.discourse-cdn.com/v4/letter/m/f6c823/32.png) [@MHDevBlue](https://guild.rpgmakerofficial.com/u/MHDevBlue)\
**Post date:** [2026 年 9 月 14 日午後 11:18 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/13 "2026-09-14T23:18:34Z")

</div>

いいえ、大丈夫です。これは結構明らかな問題でした。`ATTACKING=ON`を間違った場所に設定しており、それがオフにならず、その結果、攻撃判定が常にプレイヤーに固定されていました。

その後すぐに新たな問題が発生しました。時々、Zキーを連打すると、攻撃判定のイベントが置き去りになって、プレイヤーを追跡しなくなることがあるのです。Zキーを再度押すとプレイヤーの位置に戻りますが、攻撃判定の当たり判定領域がプレイヤーの背後に残ったままになるのは……問題ですね。何かアイデアはありますか？

---

<div class="post-metadata">

**Author:** ![Baz](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/baz/32/100_2.png) [@Baz](https://guild.rpgmakerofficial.com/u/Baz)\
**Post date:** [2026 年 9 月 15 日午前 12:00 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/14 "2026-09-15T00:00:26Z")

</div>

ふむ、次に進む前にいくつか質問があります。攻撃衝突イベントのオプションに「すり抜け」がチェックされていますか？また、2つの「移動経路設定」には「動けない場合はスキップ」が設定されていますか？

なぜそう聞いているのかというと、移動経路は衝突判定を尊重するため、1歩前進は前方のタイルが壁や他のイベントで塞がれていると失敗します。「動けない場合はスキップ」がオフの場合、失敗したステップはスキップされるのではなく、毎フレーム再試行され、共通イベントは「攻撃中」がONのまま待機状態になります。「攻撃中」がONであることが、衝突イベントが追従しない条件そのものなので、ブロックされている限りその場に留まり続けます。歩きながらZを連打すると、 eventually 壁や敵を向いた状態で攻撃が命中する可能性があり、それが「sometimes」の原因かもしれません。確認する方法の一つは、Zが詰まっている間に全く反応しないかどうかです。もしこれが原因なら、前方の障害物から離れるまで何もしません。

いずれにせよ、攻撃衝突には「すり抜け」を有効にすべきです。敵が立っているタイルに移動してヒットを判定するにはすり抜けが必要であり、イベントは優先度に関係なく互いをブロックするため、すり抜けがないと敵への攻撃自体がブロックされてしまいます。

もう一つの選択肢は、歩行を諦めて直接配置することです。衝突イベントにはすでに4つの方向別の分岐がありますので、「イベント位置設定」でBPlayerのXとY座標を、向いている方向に1つずらした位置に設定し、攻撃の持続フレーム数だけ保持し、その後通常の追従ロジックで戻すようにします。移動経路も不要で、待機すべきものもなく、ブロックされることもありません。

---

<div class="post-metadata">

**Author:** ![MHDevBlue](https://avatars.discourse-cdn.com/v4/letter/m/f6c823/32.png) [@MHDevBlue](https://guild.rpgmakerofficial.com/u/MHDevBlue)\
**Post date:** [2026 年 9 月 15 日午前 12:05 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/15 "2026-09-15T00:05:17Z")

</div>

これは修正済みです！攻撃の衝突判定は常にプレイヤーに付随するようになりました。

次の問題について（申し訳ありませんが、システムの複雑さによりいくつかの問題が発生する見込みです。いつでも離脱しても大丈夫ですよ lol）

通常の攻撃には、主要なノックバック攻撃とは別に、小さなノックバック処理が設定されています。しかし、敵が実際にノックバックされるためには、現在実行中の動作を完了する必要があるようです。その結果、敵が新しいタイルに歩き始めようとした瞬間に攻撃を受け、タイルに完全に移動する（最大で0.5秒後）までノックバックが適用されないという状況が発生します。

要するに、敵は即座にノックバックされないということです。

これを修正する方法として考えられるのは、敵がゲーム上現在「立っている」とされるタイルの中央に強制的に位置を移動させることですが、これが正しいアプローチかどうかはわかりません。もし私の説明で理解していただけた方がいれば、何か提案はありますか？

---

<div class="post-metadata">

**Author:** ![Baz](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/baz/32/100_2.png) [@Baz](https://guild.rpgmakerofficial.com/u/Baz)\
**Post date:** [2026 年 9 月 15 日午前 12:07 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/16 "2026-09-15T00:07:39Z")

</div>

おっ、いいね！

その通りで、強制移動ルートの処理は、キャラクターが現在実行中のステップを完了した時点で才开始されます。そのため、ステップの途中にノックバックを設定しても、まずはその歩行の残り部分を完了してからルートの処理が始まります。デフォルトの移動速度では、1ステップ完了するまでに0.5秒弱かかるため、あなたが観測している現象と一致します。

あなたの修正アイデアも正解で、必要な数値もすでに把握されていますね。エンジンでは、イベントのマップ上のX座標とY座標は、ステップが開始された瞬間に目的地のタイルに設定されます。つまり、当たり判定に使用するSV: My XおよびMy Yは、移動先のタイル座標を指しています。ノックバックルートの直前に「イベント位置の設定：このイベント」コマンドで、これらの2つの変数をイベント座標に設定すると、イベントは即座にそのタイルにスナップします。これにより現在のステップが終了し、ルート処理は次のフレームから実行されます。

ただし、当たり判定がステップの途中で行われた場合、歩行が1フレームで完了するため、最大で半タイル分の視覚的なジャンプが発生するのがコストとなります。

---

<div class="post-metadata">

**Author:** ![MHDevBlue](https://avatars.discourse-cdn.com/v4/letter/m/f6c823/32.png) [@MHDevBlue](https://guild.rpgmakerofficial.com/u/MHDevBlue)\
**Post date:** [2026 年 9 月 15 日午前 12:15 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/17 "2026-09-15T00:15:02Z")

</div>

確かに問題は大幅に改善されました。しかし、場合によってはノックバックが全く発生しないようで、攻撃された際にタイル分だけ前方にポップしているようにも見えます？最近組み込まれたコードがこの問題の原因になっているような気がしますが、あなたはどう思いますか？

---

<div class="post-metadata">

**Author:** ![Baz](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/baz/32/100_2.png) [@Baz](https://guild.rpgmakerofficial.com/u/Baz)\
**Post date:** [2026 年 9 月 15 日午前 12:16 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/18 "2026-09-15T00:16:55Z")

</div>

ポップフォワードは、ステップの開始と同時にヒットが着地する瞬間のスナップ自体です。この瞬間、イベントのマップ座標XとYはすでに目的地のタイルになっているため、前に言った半タイルではなく、完全に1タイル分前方に引き寄せられます。ノックバックが不足しているように見えるのも、裏返して見れば同じことです。プレイヤー方向に1タイルスナップし、敵方向に1タイルノックバックすると、視覚的に開始した位置に戻るので、何も起こっていないように見えます。

スプライトが視覚的に最も近いタイルにスナップすることで、論理的なタイルではなく、両方の問題を修正できます。実際の位置はイベントコマンドとして公開されていませんが、制御変数でオペランドを「スクリプト」に設定することで、それぞれ1行で取得できます：

```auto
◆制御変数: スナップX = Math.round(this.character(0)._realX)
◆制御変数: スナップY = Math.round(this.character(0)._realY)
◆イベント位置設定: このイベント、({Snap X},{Snap Y})

```

これをノックバックルートの手前、ヒット判定が既に成功した直後に配置します。ポップは短い方の方向で最大半タイルまで下がり、ノックバックは敵がいたように見える場所から常に1タイル分の移動になります。

スクリプトを使わずに済ませたい場合、発生源のタイルは、その向いている方向へ1ステップ分だけ引いた論理タイルなので、このイベントの方向と4つの分岐を使うことで同じことが実現できます。

何も起こらないケースを確認する際、ダメージは依然として適用されますか？適用されない場合、それは別の問題です。敵がヒットボックスタイルから離れ、論理的位置が最初から一致しなかったためです。

---

<div class="post-metadata">

**Author:** ![MHDevBlue](https://avatars.discourse-cdn.com/v4/letter/m/f6c823/32.png) [@MHDevBlue](https://guild.rpgmakerofficial.com/u/MHDevBlue)\
**Post date:** [2026 年 9 月 15 日午前 12:48 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/19 "2026-09-15T00:48:34Z")

</div>

ダメージはノックバックされていなくても依然として適用されていましたね。

ともかく、なぜか敵に攻撃すると、倒されていないのに即座に消えてしまいます。計算式を間違えたのでしょうか？

 ![image](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/2X/5/56e26779aa360d03c2f4dbae6b7383bd449b3438.png)

彼らはボイド内のかなりランダムな場所にいました。

---

<div class="post-metadata">

**Author:** ![Baz](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/baz/32/100_2.png) [@Baz](https://guild.rpgmakerofficial.com/u/Baz)\
**Post date:** [2026 年 9 月 15 日午前 1:30 UTC](https://guild.rpgmakerofficial.com/t/topic/2928/20 "2026-09-15T01:30:23Z")

</div>

2行目のスクリプトでは `_realY` が必要な箇所で `_realX` が使われているため、My Y に X 座標が代入され、Set Event Location によって (x, x) に配置されています。これは虚空の位置です。

```auto
◆制御変数: #0195 SV: My Y = Math.round(this.character(0)._realY)

```

このブロック内の他の部分はすべて正しく読み取れています。

[次のページ](https://guild.rpgmakerofficial.com/t/topic/2928.md?page=2)
