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

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

【2DのTest】05_ジャンプの基本

さてジャンプしていきたい

今回の参考サイト

dkrevel.com

重力を無効にする

Rigidbody2Dに設定された重力を無効にする
システムの重力は使用したくないので
f:id:mekatamatama:20201211221634p:plain
再生するとplayerが落下しなくなるはず

player_move.csを編集

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class player_move : MonoBehaviour{
	public float speed;			//速度
	private Rigidbody2D rb = null;
	public player_groundCheck groundCheck;	//他のオブジェクトのスクリプト入れる用
	public float gravity;			//重力
	public float jumpSpeed;			//jump力
	private bool isGround = false;		//接地flag移動用
	private bool isJump = false;
	private float jumpPos = 0.0f;		//jump開始時のyを保存
	public float jumpHight;			//jumpする高さ

    void Start(){
		rb = GetComponent<Rigidbody2D>();	//Rigidbody2D取得
	}

	//物理演算用
	void FixedUpdate(){
		//接地判定確認
		isGround = groundCheck.IsGround();	//groundCheckスクリプトにアクセス

		//キー入力
		float horizontalKey = Input.GetAxis("Horizontal");
		float xSpeed = 0.0f;		//初期化
		//重力発生
		float ySpeed = -gravity;	//下方向に力を発生

		//右入力
		if(horizontalKey > 0){
			xSpeed = speed;
		}
		//左入力
		else if(horizontalKey < 0){
			xSpeed = -speed;
		}
		//無入力
		else{
			xSpeed = 0.0f;
		}

		//jump入力
		if(isGround == true){	//接地時
			if(Input.GetKey(KeyCode.Space)){
				ySpeed = jumpSpeed;
				jumpPos = transform.position.y;	//jump開始時のy保存
				isJump = true;			//jump flag on
				Debug.Log(jumpPos);
			}else{
				isJump = false;	//jump flag off
			}
		}
		else if(isJump == true){	//接地してなくてjump中の時
			//キー入力中に、jumpしたい高さより低ければ
			if(Input.GetKey(KeyCode.Space) && (jumpPos + jumpHight > transform.position.y)){
				ySpeed = jumpSpeed;
			}else{
				isJump = false;	//jump flag off
			}
		}

		//実際に移動
		rb.velocity = new Vector2(xSpeed, ySpeed);
	}
}

さて、てんこ盛りの内容になってきた

自前で重力を用意する

スクリプトで自前の重力を発生させる
凄く素直な感じですね

//重力発生
float ySpeed = -gravity;	//下方向に力を発生

接地判定の読み込み

参考サイト

qiita.com

まずは入れる場所を用意
スクリプト名を使って読み込めるっぽい
今回はgroundCheckという変数に入れている

public player_groundCheck groundCheck;	//他のオブジェクトのスクリプト入れる用

スクリプトにアクセスしたい時は↓のように
関数名を後ろにつけてあげればよい

isGround = groundCheck.IsGround();	//groundCheckスクリプトにアクセス

jumpに至るまでる考え方は参考サイトさんの方が詳しいので、頼り切ってしまうw

最終的にこんな感じに設定していきました
f:id:mekatamatama:20201211230229p:plain

それっぽく動きました
f:id:mekatamatama:20201211230331g:plain:h300