Unity で2D横スクロールゲーム作り。キャラがジャンプしなくて困っています。
解決したいこと
たのしい2Dゲームの作り方という本をもとに、
サンプルコードを入力して、
プログラミングをしようとしています。
横スクロールゲーム(スーパーマリオのような感じのゲーム)
を作る途中で、
キャラクターが左右のアローキーには反応するのですが、
スペースキーを押してもジャンプしないという状態になりました。
本のP108ページのところで止まっています。
キャラクターがスペースキーでジャンプする状態にしたいです。
発生している問題・エラー
エラーメッセージは出ずに、
実行できます。
該当するソースコード
ソースコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
Rigidbody2D rbody; //Rigidbody2D型の変数
float axisH = 0.0f; //入力
public float speed = 3.0f; //移動速度
public float jump = 9.0f; //ジャンプ力
public LayerMask groundLayer; //着地できるレイヤー
bool goJump = false; //ジャンプ開始フラグ
// Start is called before the first frame update
void Start()
{
rbody = this.GetComponent<Rigidbody2D>(); //Rigidbody2Dを取ってくる
}
// Update is called once per frame
void Update()
{
//水平方向の入力をチェックする
axisH = Input.GetAxisRaw("Horizontal");
//向きの調整
if (axisH > 0.0f)
{
Debug.Log("右移動");
transform.localScale = new Vector2(1, 1);
}
else if (axisH < 0.0f)
{
transform.localScale = new Vector2(-1, 1);
}
//キャラクターをジャンプさせる
if (Input.GetKeyDown(KeyCode.Space))
{
//Debug.Log("スペースキーが押された");
Jump();
}
}
void FixedUpdate()
{
//地上判定
bool onGround = Physics2D.CircleCast(transform.position, //発射位置
0.2f, //円の半径
Vector2.down, //発射方向
0.0f, //発射距離
groundLayer); //検出するレイヤー
if (onGround || axisH != 0)
{
//速度を更新する
rbody.velocity = new Vector2(axisH * speed, rbody.velocity.y);
}
if (onGround && goJump)
{
Debug.Log("地上でスペースキーが押された");
//地面の上でジャンプキーが押された
//ジャンプさせる
Vector2 jumpPw = new Vector2(0, jump); //ジャンプさせるベクトルを作る
rbody.AddForce(jumpPw, ForceMode2D.Impulse); //瞬間的な力を加える
goJump = false;
}
}
//ジャンプ
public void Jump()
{
goJump = true; //ジャンプフラグを立てる
}
}
※キャラクターにはRigidbody2DとCapsule Collider 2Dをつけています。
※地面にはBox Collider 2Dをつけています。
敵キャラはまだ出てこなくて、主人公キャラと、地面と、ブロックが出てくる状態です。
### 自分で試したこと
スペースキーが押されたら、DEBULOGで”スペースキーが押された”という文字を表示するようにし、
実行すると、その文字が表示されるので、スペースキーのキー入力は反応しているようです。