実際にゲームを実行した際、衝突領域オブジェクトとしてなぜ2つのCollisionShape2Dが表示されるのか?

皆さんこんにちは、理解に苦しむ問題があるので質問させてください!

図の通り、オブジェクトに CollisionShape2D を設定しました。確認しやすくするため、選択枠の色を紫色に変更しています。

より明確に示すため、あえて CollisionShape2D の位置枠を修正しました。

デバッグ時に衝突領域の表示をオンにすると、

紫色の枠の上に、デフォルトの CollisionShape2D が重ねて表示されていることに気づきます。

この水色の枠は、衝突枠の位置を設定するとそれに合わせて自動的に移動します。通常は物理的な衝突効果は一切発生しません。衝突領域の表示をオンにした時のみ現れます。

理解しやすくするため、衝突枠の位置を調整して再度デモンストレーションします。

すると、この水色の CollisionShape2D の枠もこの位置に移動します。

物理的な衝突効果がないため、これまで存在を無視していました。しかし最近、この枠が「壁への埋没検出」を認識していることに気づきました。上記の図の通り、これはオブジェクトが壁に埋まっていることを意味します……これが一部の動作を妨げています。

オブジェクトには CollisionShape2D を一つだけ設定していることは確信しています。この水色の枠が表示される原因は何かご存知の方はいらっしゃいますか?これは何を意味しているのでしょうか?また、どのようにすればこれを非表示にできるでしょうか?

こんにちは。

デバッグ中に画面上部の「2D」を選択->対象のコリジョンの上で「Alt」+右クリックで対象のノードが表示されるようです。

こちらで何が設定されているか特定のヒントにならないでしょうか。

image

ご協力ありがとうございます。この方法で衝突ボックスの位置を特定できました。

このオフセットした衝突ボックスを黄色でマークしました。場所は以下の通りです。

/root/CoreScene/GameScenes/GameScene/SceneLayer/P1/CollisionShape2D/@Area2D@13/@CollisionShape2D@12

オブジェクト名は P1 ですが、この @Area2D@13/@CollisionShape2D@12 は私のキャラクターの CollisionShape2D ではありません。位置は特定できましたが、どうやってこれを無効化して表示させないようにすればよいかが分かりません。:sweat_smile:

長い調査の末、ようやくこの当たり判定が出現する原因がわかりました。オブジェクトのVSに「壁に埋まっている検出中」というアクションが含まれている場合、オブジェクトが壁に埋まっているかどうかを識別するために、この当たり判定が生成されます。

しかし、本来は私の基本CollisionShape2Dと重なるはずのこの当たり判定は、CollisionShape2Dの位置が中心(X0.0px Y0.0px)でない場合、壁埋め検出用の当たり判定がCollisionShape2Dから離れてしまいます。

例A :down_arrow:
CollisionShape2DがX0.0px Y0.0pxにある場合、この壁埋め検出用の当たり判定はCollisionShape2D上に重なって表示されます。

例B :down_arrow:

しかし、CollisionShape2DがX10.0px Y-10.0pxにある場合、この壁埋め検出用の当たり判定は、CollisionShape2Dが中心からずれた距離に応じて、さらにその半分だけ移動してしまいます。

「壁に埋まっている検出中」の当たり判定がこのような挙動をするのは不合理だと考えています。この当たり判定のため、私のキャラクターが誤って壁に埋まっていると判定されることが頻繁に起こっています。

開発チームの皆様、この投稿をご覧いただき、解決策をご回答いただけますと幸いです。本当にありがとうございます!!!

「いいね!」 3

素晴らしい調査ですね @S.C、詳細な解説をありがとう!

私の理解では、IsEmbeddedInWall(BuriedInWall)条件は、メインの CollisionShape2D をミラーリングする CollisionShape2D を自動生成するはずですが、メインのものが (0, 0) からオフセットされている場合、生成されたものは一致するのではなく、オフセット距離の半分だけずれるということです。私の方でも同じ動作を確認できましたので、これを開発者に報告します。詳細なレポートをありがとう、検証しやすかったです。

その間、考えられる回避策として、メインの CollisionShape2D を (0, 0) に中心に配置し、代わりに Sprite2D や AnimatedSprite2D をオフセットして、望む視覚的な配置を得るという方法があります。理想的ではありませんが、修正があるまで誤検出を避けることができるはずです。

「いいね!」 2

gaz さんからの返信とご報告、どうもありがとうございます。ご指摘の通りです。

私のキャラクターにはしゃがむや変形など多くのアクションアニメーションがあり、それらは AnimationPlayer を使って CollisionShape2D の位置を固定しています。そのため、修正が完了するまで、当面は IsEmbeddedInWallBuriedInWall)条件を無効にすることにしました。

修正版のアップデートを楽しみにしています!

@Baz 本日は**【壁への埋め込み検出中】**のテストを行っており、少し奇妙な現象が発生しています。

例:オブジェクトAに**【壁への埋め込み検出中】**→ 【HP0】→ **【セーブデータの読み込み】**のトリガーを設定しました。

オブジェクトAをtilemap上に配置し、他のオブジェクトによって上下に押し付けられると、すぐに埋め込み検出が成功しHP0がトリガーされます。

しかし、左右に押し付けられた場合は埋め込み検出が正常に機能せず、オブジェクトAは壁の中に押し込まれたまま、移動オブジェクトが離れるまでその状態が続きます。

これはバグでしょうか?もし問題があるようでしたら、再現のお手伝いと報告をよろしくお願いいたします。ありがとうございます。

おまたせしました、この判定ズレの問題は本日配信の1.2.9で修正しました

即時の修正、誠にありがとうございます。

ただし、この衝突判定に関連して以前にも別の問題が検出されたまま未解決のようです。制作チームにご確認いただけますでしょうか。

「いいね!」 1

こちら以下の方法で再現を試してみました。

  1. 壁に埋まったら「埋まった」とコンソールに出力するArea2DGameObjectを作成。
  2. 左右、上下に移動し壁にめり込む。
    結果としては、左右でも上下でも正常に動作していましたので、なにか別の条件がありそうだと感じています。
    再現可能なプロジェクトをいただくことはできますか?

こんにちは。私のオブジェクトは通常のGameObjectで、設定もシンプルです。

ただし、私のオブジェクトには左右から攻撃を受けると弾き飛ばされてHPが減少する設定があります。この動作が壁への埋め込み検出のトリガーを無効にしていることが確実です。しかし、弾き飛ばされた場合でもanystate内にあるはずで、理論的には検出がトリガーされるはずです。

録画_2026_04_28_15_06_13_374

通常のGameObjectに変更し、敵に押される状態を試してみましたが正常に動作していました。

  1. Anystate→壁に埋まる→埋まったとコンソール出力するプレイヤー
  2. そのプレイヤーをただ押し込むエネミー

で、右から左、上から下への押し込みと壁へのめり込みを試しましたが、正常に「埋まった」と出力されています。
恐らく、何らかの他の設定が影響を与えている可能性が高いと感じます。
怪しいのはコリジョンのレイヤー/マスクか、その吹き飛びアクションの何らかの設定でしょうか。

より最小の設定で再現が可能か試してみてもらうことはできますか?

一輪のテストを経て、左側からの攻撃によって埋め込み検出が失敗したことが確認できました。

優先度をどう調整しても、この動作が存在する限り壁への埋め込み検出がトリガーされないため、本当に理解できません= =|||

恐らく何らかの複合的な要因なので、よければプロジェクトを送ってもらえますか?

はい、個別に簡略化した GameObject をメールでお送りします。メールアドレスをご教示ください。

問題の原因は把握していますが、解決方法がわからず、お手数ですがご確認をお願いします。私も引き続き修復の試みを続けています。

追伸:攻撃を受ける条件アクションにさらに制限条件を追加したところ、ついに壁にめり込む現象が正常に発生しました!!!:rofl:

「いいね!」 1

よかったです!
pgmmv-support@gotchagotcha.jp
でお願いします

「いいね!」 1

moonling様、迅速なフィードバックをいただきありがとうございます。それによって、私は学びながら成長することができました。

何度かテストを重ねた結果、無事に修正が完了しました。今回はご迷惑をおかけせずに済みそうです!

また、バージョン1.29のBGMについていくつか小さな質問があります。moonling様の更新告知の下にコメントを残しましたので、お時間のある際にご確認いただければ幸いです。重ねて御礼申し上げます。