Unityでジャンクゲームを作っているっぽい

会社帰りにGPD PocketにUnity入れてゲーム作ってます

【2DのTest】04_接地判定

ジャンプしたいけど、そのためには接地判定しないといけない

今回の参考サイト

dkrevel.com

接地判定するパーツを作る

  1. playerの子供に、空のオブジェクトを追加
  2. GroundCheckとリネーム
  3. BoxCollider2Dを、接地判定したい場所(足元)に追加
  4. isTriggerをonにする

f:id:mekatamatama:20201207220441p:plain

地面にtagを設定

設定判定時に地面だと認識したいのでtagを利用する
新規でGroundというtagを用意してアサインする
f:id:mekatamatama:20201207221108p:plain

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の挙動は↓みたいなループになる感じのはず

  1. (空中)接地判定off
  2. (空中から接地)接地判定on
  3. (接地中)接地判定on
  4. (接地から空中)接地判定off
  5. 最初へ戻る

以上を元に接地判定IsGrounを切り替える
初期化しているのは、物理処理が走るたびにisGroundを判定したいからかな

GroundCheckにスクリプトアサイ

f:id:mekatamatama:20201209231659p:plain

これで接地判定で来たはず
次はジャンプだ