前提・実現したいこと
https://dkrevel.com/makegame-beginner/make-2d-action-jump/
このサイトを見本にプログラムをしているのですがこのサイトの<高さを調節できるジャンプを作ろう>
の項目ができません
発生している問題・エラーメッセージ
矢印キーの上を押すことでジャンプ出来るはずができませんでした。一応
コンソールは見ましたがエラーは発生しておりませんUnityのバージョンは2020年の1.14fです。
unityのEdit>ProjectSettingから左メニューのInputを選択して、Verticalの中
のPositive Buttonが違うのかと思い確認しましたがちゃんとupになっていました
誰か解決案くださるとありがたいです
エラーメッセージ
該当のソースコード
ソースコード using System.Collections; using System.Collections.Generic; using UnityEngine; public class player : MonoBehaviour { //インスペクターで設定する public float speed; //速度 public float gravity; //重力 public float jumpSpeed;//ジャンプする速度 public float jumpHeight;//高さ制限 public Ground ground; //接地判定 //プライベート変数 private Animator anim = null; private Rigidbody2D rb = null; private bool isGround = false; private bool isJump = false; private float jumpPos = 0.0f; void Start() { //コンポーネントのインスタンスを捕まえる anim = GetComponent<Animator>(); rb = GetComponent<Rigidbody2D>(); } void FixedUpdate() { //接地判定を得る isGround = ground.IsGround(); //キー入力されたら行動する float horizontalKey = Input.GetAxis("Horizontal"); float xSpeed = 0.0f; float ySpeed = -gravity; float verticalKey = Input.GetAxis("Vertical"); if (isGround) { if (verticalKey > 0) { ySpeed = jumpSpeed; jumpPos = transform.position.y; //ジャンプした位置を記録する isJump = true; } else { isJump = false; } } else if (isJump) { //上ボタンを押されている。かつ、現在の高さがジャンプした位置から自分の決めた位置より下ならジャンプを継続する if (verticalKey > 0 && jumpPos + jumpHeight > transform.position.y) { ySpeed = jumpSpeed; } else { isJump = false; } } if (horizontalKey > 0) { transform.localScale = new Vector3(2, 2, 1); anim.SetBool("走る", true); xSpeed = speed; } else if (horizontalKey < 0) { transform.localScale = new Vector3(-2, 2, 1); anim.SetBool("走る", true); xSpeed = -speed; } else { anim.SetBool("走る", false); xSpeed = 0.0f; } rb.velocity = new Vector2(xSpeed, ySpeed); } }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
Debug.LogでisGround,verticalKeyの値を確認してみてください
回答ありがとうございます
自分なりに調べてみてDebug.Logをコードに付け足したのですがこれであってるのでしょうか?
ちなみに一番下にあります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player : MonoBehaviour
{
//インスペクターで設定する
public float speed; //速度
public float gravity; //重力
public float jumpSpeed;//ジャンプする速度
public float jumpHeight;//高さ制限
public Ground ground; //接地判定
//プライベート変数
private Animator anim = null;
private Rigidbody2D rb = null;
private bool isGround = false;
private bool isJump = false;
private float jumpPos = 0.0f;
void Start()
{
//コンポーネントのインスタンスを捕まえる
anim = GetComponent<Animator>();
rb = GetComponent<Rigidbody2D>();
}
void FixedUpdate()
{
//接地判定を得る
isGround = ground.IsGround();
//キー入力されたら行動する
float horizontalKey = Input.GetAxis("Horizontal");
float xSpeed = 0.0f;
float ySpeed = -gravity;
float verticalKey = Input.GetAxis("Vertical");
if (isGround)
{
if (verticalKey > 0)
{
ySpeed = jumpSpeed;
jumpPos = transform.position.y; //ジャンプした位置を記録する
isJump = true;
}
else
{
isJump = false;
}
}
else if (isJump)
{
//上ボタンを押されている。かつ、現在の高さがジャンプした位置から自分の決めた位置より下ならジャンプを継続する
if (verticalKey > 0 && jumpPos + jumpHeight > transform.position.y)
{
ySpeed = jumpSpeed;
}
else
{
isJump = false;
}
}
if (horizontalKey > 0)
{
transform.localScale = new Vector3(2, 2, 1);
anim.SetBool("走る", true);
xSpeed = speed;
}
else if (horizontalKey < 0)
{
transform.localScale = new Vector3(-2, 2, 1);
anim.SetBool("走る", true);
xSpeed = -speed;
}
else
{
anim.SetBool("走る", false);
xSpeed = 0.0f;
}
rb.velocity = new Vector2(xSpeed, ySpeed);
Debug.Log(verticalKey);
}
}
if (isGround) { の1つ上の行にDebug.Log("isGround: " + isGround);
if (isGround) { の1つ下の行にDebug.Log("verticalKey: " + verticalKey);
ですかね?
実行すればコンソールに「isGround: true」「verticalKey: (値)」もしくは「isGround: false」と出ますが、
・何やってもisGroundがfalseのままならground.IsGround();もしくはそれに関係する設定がおかしい?
・isGroundはtrueなのにverticalKeyが0のままなら値を取得出来きてない?
そのソースと参考サイトを自分で試して、ここら辺がジャンプしない原因じゃないかなって思いました
そのソースと参考サイトを自分で試してまで質問に答えてくれるとはありがとうございます。
結果ですが「isGround: true」「verticalKey: (値) コンソールにはでなくて isGround: false が何やっても出てくるので.IsGround関係の設定を見直してきます
解決出来ました本当にありがとうございました。これで先に進めます!
<解決法>
https://dkrevel.com/makegame-beginner/make-2d-action-ground/のサイトの
<地面を地面と認識できるようにしよう>の目次にあるTagを使用しようと言われているのに
Tagが未設定のままでした。(本当にすいませんでした)
せっかく回答をいただいたのですがteratailの質問への追記.修正の依頼の欄に回答があるためベストアンサーに出来ないのですがそれでよいのでしょうか? もし回答に書くのであればせっかくここまで答えてくれたので自分はベストアンサーにします。
解決出来たようで良かったです
BAはまぁ気にしないでください原因探すヒントしか出してないので
何やったか書いて自己解決扱いでオッケーです!
分かりました。
回答1件
あなたの回答
tips
プレビュー