ジャンプしたいけど、そのためには接地判定しないといけない
今回の参考サイト
接地判定するパーツを作る
- playerの子供に、空のオブジェクトを追加
- GroundCheckとリネーム
- BoxCollider2Dを、接地判定したい場所(足元)に追加
- isTriggerをonにする
地面にtagを設定
設定判定時に地面だと認識したいのでtagを利用する
新規でGroundというtagを用意してアサインする
player_grundCheck.csを新規作成
using System.Collections; using System.Collections.Generic; using UnityEngine; public class player_groundCheck : MonoBehaviour{ private bool isGround = false; //接地flag移動用 private bool isGroundEnter; //接地時 private bool isGroundStay; //接地中 private bool isGroundExit; //接地終了時 //接地判定(ここが呼ばれた時に判定する) public bool IsGround(){ if(isGroundEnter == true || isGroundStay == true){ isGround = true; } if(isGroundExit == true){ isGround = false; } //初期化 isGroundEnter = false; isGroundStay = false; isGroundExit = false; //返り値設定 return isGround; } //接地時 private void OnTriggerEnter2D( Collider2D other) { if(other.tag == "Ground"){ isGroundEnter = true; } } //接地中 private void OnTriggerStay2D( Collider2D other) { if(other.tag == "Ground"){ isGroundStay = true; } } //接地終了時 private void OnTriggerExit2D( Collider2D other) { if(other.tag == "Ground"){ isGroundExit = true; } } }
基本的な接地の流れ
下に用意された3つの処理で、接地の状態を細かく判定できる
- 空中から接地
- OnTriggerEnter2D
- 接地中
- OnTriggerStay2D
- 接地から空中
- OnTriggerExit2D
実際のplayerの挙動は↓みたいなループになる感じのはず
- (空中)接地判定off
- (空中から接地)接地判定on
- (接地中)接地判定on
- (接地から空中)接地判定off
- 最初へ戻る
以上を元に接地判定IsGrounを切り替える
初期化しているのは、物理処理が走るたびにisGroundを判定したいからかな