2016年6月27日月曜日

[Unity][2D]接地判定するスクリプト

ローグライクの製作に疲れて息抜きにアクションゲームを作っているので、アクションゲーム用です。
キャラクターが空中に居るかどうかを判定する接地判定のメモとスクリプト。

前提

  • 接地判定用のBoxCollider2Dが存在する(キャラクターの当たり判定の流用でもOK)
  • 地形のColliderにLayerが設定されている

手順

UnityにはPhysics2D.BoxCastというメソッドが存在します。
このメソッドは特定の方向に四角いあたり判定を飛ばして、衝突を検出するメソッドです。Raycastのぶっとい版です。
(類似品にCircleCastや3D用のPhysics.BoxCast,Physics.SphereCastなどもあります)
このメソッドのdistanceパラメータで飛ばす距離を指定できるので、ごく短い距離のBoxCastを垂直下向きに飛ばして地面と接触したかを見れば接地判定できます。

但しひとつ注意点があって、Castを飛ばす元がすでに地形と接触している場合、BoxCastが反応せずにすり抜けてしまいます。
この現象はテラシュールブログさんの記事に詳しいです。
これを回避するために、BoxCastはBoxColliderの中心ではなく少し上から発射するように設定します。

スクリプト

というわけでスクリプトです。
このスクリプトをアタッチするとお手軽に接地判定ができるぞ。

0 件のコメント:

コメントを投稿