はるきちの雑記

対戦よろしくおねがいします

【Unity】2Dゲームの罠

今2Dのゲーム作ってるんですけど、かなり初歩的な部分でめちゃ躓いてしまったので、戒めのためにもこの記事にまとめておきます。

それは2Dゲームを制作していたあるときのこと

操作可能なプレイヤーともなるオブジェクト(以降鯉とします)にColliderとRigidBodyを付けて、足場となるオブジェクト(以降木箱とします)にColliderを付ければ、鯉と木箱間で当たり判定が発生するだろうな~と思って実行してみたところ、こんなことが起きました。

鯉がすり抜けてる…おかしい

あまりにもおかしいので、鯉と木箱のインスペクターに何が追加されているかを確認してみた
まずは鯉の方から

しっかりRigidBodyとCapsuleColliderがついてます。

次に木箱のインスペクターです。

こっちにもちゃんとBoxColliderがあります。

ちなみに調べてみたところ、2DのColliderと3DのColliderをどっちも使うことは無理みたいです。
つまり、今回の例で行くと、鯉に2DのColliderを付けて、木箱に3DのColliderを付けても当たり判定は発生しないみたいです。
ただ、今回はどっちも3Dのを使ってるし、なんでだろうな~~と思いながらシーンタブをいじくりまわしていたら…

3D表記にできるんかいコイツ

しかもめちゃくちゃ鯉と木箱のZ座標ずれとるがな

結論としては、鯉と木箱のZ座標の位置が一致してなかったことが原因でした。
というか、2Dのゲームだからシーンを3Dにできないというのと、Z座標なんて使わないという先入観もあったのがまずかったかもしれない。
2DのゲームだからXとY座標さえあればいいんじゃね?って思ってたけど、確かに奥行きとか設定するのにZ軸もいるよね…

ということで、鯉と木箱のZ座標を見直します。

鯉と木箱の位置を調整しました、今度こそすり抜けるようなことは起きないはず

無事鯉が木箱にぶつかったり、ジャンプする動作ができるようになりました~やった~~

ということで、今回の原因はゲーム制作に無知すぎたがゆえに起きたことがわかりました。
これから2Dのゲームを作るときもZ座標のことを気にかけてあげようと思います。