着地したときの判定をどうするかの備忘録。
環境
Unity 2D
OnCollisionEnter2DとOnCollisionExit2D (ちょっと微妙)
- OnCollisionEnter2D
- OnCollisionExit2D
を使って、判定してみようと思いました。
基本コンセプトはイベントが呼ばれたときに、Physics2D.OverlapAreaを実行して、自身の下側と地面が衝突していれば着地判定できるので、これでいいかなと思ったのですが、OnCollisionExit2Dの時ではExitされるGameObjectはまだExitされていないので衝突判定で衝突ありと判定されてしまうので、除かないといけません。
全対象をチェックする
Physics2D.OverlapAreaAllを使って、そこからExitされるCollisionを除いてチェックすればOkです。
ただちょっと面倒だなと思ったので微妙かなと思いました。
あとなんでいちいちExitの時にチェックするかというと、地面のブロックが2つ合ってキャラクターが2つのブロックの間の上に立っている場合に、片方のブロックが無くなっても、もう片方のブロックが存在しているので、チェックしないと片方のブロックの上に着地しているのに、着地していない判定になってしまうからです。
調べてみた
初心者がUnity2Dでアクションゲームを作るチュートリアル その3 【接地判定編】 | Go-Nextブログ
この記事がわかりやすくて、Physics2D.OverlapAreaを使って、FixedUpdateで常にチェックしているというコードでした。
こっちの方がシンプルで良いかなと思いました。
感想
FixedUpdateとOnCollision系イベントだと負荷はどのくらい違うかとか気になるところでしたが、とりあえず、プロトタイプの完成を優先したいので、シンプルな方を選択したいです。