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、としておく。
1は、プレイヤーや通常の衝突エリアとの衝突。
2は、落とし穴との衝突。
・プレイヤーのCharacterBody2Dのcollision設定。
1で敵や、通常の衝突エリアと衝突。
2は設定しないので、落とし穴には衝突しない。
また、例えば、layerを1,maskを2,とすれば、layer2の物と衝突するが、1の物とは衝突しない。また、他の物のmaskで1,と設定されていたら、それとは衝突する、のように、細かく分けていくことができます。
上記のようなことを知らなかったので、攻撃の当たり判定では、以下のように、エリアの名称や、editor descriptionに記入する文字にルールを設け、それを元に直打ちの分岐で衝突対象を分別していました。知っていればcollisionの設定変更だけで対応できたのに・・・、と少し後悔。
コメント
コメントを投稿