CharacterBody2D, StaticBody2D)エリアの衝突(collision)の有無を、objectの組み合わせごとに分けたい

以下のように落とし穴を作成してみました。

落とし穴では、以下のようにオブジェクトごとに挙動を変えたいです。

・プレイヤー:

落下エリアに侵入できる。(侵入すると、プレイヤーの落下モーションを再生。プレイヤーは1個下の階の絵を描いたシーン内の別の位置に移動、落下ダメージを受ける。)

・敵:

落下エリアに侵入できない。(敵は落下エリアを避ける(衝突する))


・赤い四角形の部位が落下エリア。

CharacterBody2DやStaticBody2Dには、collision layer(所属レイヤー), collision mask(衝突対象のレイヤー)、という設定がインスペクターに有り、それを衝突対象のオブジェクトごとに設定変更することで、衝突の有無を変更できます。

ただ、area2Dにはこの設定値が無いため、上記CollisionPolygon2Dの親に、staticBody2Dを配置、StaticBody2Dのcollision layer, collision maskの設定を変更します。


・以下”CS”は落とし穴のCollisionPolygon2D、その親の”EnemyStop_3”は、collision layer, collision maskを設定できるstaticBody2D。


・落とし穴の、staticBody2Dのcollision設定。
両方2、としておく。


・敵のCharacterBody2Dのcollision設定。

1は、プレイヤーや通常の衝突エリアとの衝突。

2は、落とし穴との衝突。



・プレイヤーのCharacterBody2Dのcollision設定。

1で敵や、通常の衝突エリアと衝突。

2は設定しないので、落とし穴には衝突しない。



また、例えば、layerを1,maskを2,とすれば、layer2の物と衝突するが、1の物とは衝突しない。また、他の物のmaskで1,と設定されていたら、それとは衝突する、のように、細かく分けていくことができます。

上記のようなことを知らなかったので、攻撃の当たり判定では、以下のように、エリアの名称や、editor descriptionに記入する文字にルールを設け、それを元に直打ちの分岐で衝突対象を分別していました。知っていればcollisionの設定変更だけで対応できたのに・・・、と少し後悔。



コメント

このブログの人気の投稿

プラグイン(godot sqlite)を含めてエクスポートすると、データの更新ができない問題

初心者に良い本は? → 『 ゆるっとはじめるGodot Engine ゲームプログラミング 』

他シーンからシグナルを送る方法