質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

3669閲覧

Unityでのジャンプバグがどうしても治りません…

Minobato.com

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/01/29 07:07

編集2020/02/04 18:22

Unity2Dでアクションゲームを作っていて、Vector2とAddForceを使ってジャンプをさせていました。
ですが、ブロックにぶつかっても進行方向(右なら右、左なら左)に進ませながら、ジャンプを連続ですると、仕様の5倍近いジャンプをするので、それが無いように今まで治していましたが解決方法が分からず詰んだという事でここに投稿させていただきました。

因みにジャンプをするかどうかのプロセスは、言葉で表すとこんな感じです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
①、ボタン入力された時、ジャンプの回数が0なら②へ。

②Vector2で入力先を取ってから、Rigidbody2DでAddForceでプレイヤーに力を加える。
ここから地面に着くまでもう一度ジャンプはできない。

③地面につくと、ジャンプ回数が0になって、もう一度ジャンプができる。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

実際のプログラムがこちらになります。(尚、当たり判定の関係上、「プレイヤーの本体管理」と「ジャンプ専用の当たり判定管理」とで分けています)

プレイヤー側のスクリプト

if (Input.GetButtonDown("A_Button")) { if (!JumpCommand) { if (JumpCount < 1) { AS.PlayOneShot(JumpSound); Vector2 JumpForce = new Vector2(0.0f, Player_Speed * Jump_Speed); rb2d.AddForce(JumpForce); JumpCount++; } JumpCommand = true; } }

当たり判定側のスクリプト

private void OnTriggerStay2D(Collider2D collision) { if (collision.gameObject.CompareTag("GroundBlock") || collision.gameObject.CompareTag("WhiteBlock") || collision.gameObject.CompareTag("RedBlock") || collision.gameObject.CompareTag("CloneBlock")) { GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerControllerScript>().TouchBlock = true; if (!GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerControllerScript>().JumpCommand) { GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerControllerScript>().JumpCount = 0; } } }

証拠画像も送りたかったのですが、画像の張り方が分からなかったので、言葉足らずだったかもしれません。もしそうでしたらすみません。
何方か分かる方はどうか解決策を教えてください。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/29 07:34 編集

JumpCommandをfalseにしている箇所が無いのでその箇所を記載して下さい。 それとコードはブロックで囲んで下さい。 、、、では無く```です。 前回の質問でも指摘されていますが言われた事すら出来ないと回答者にスルーされだすので気をつけた方が良いです。 それと「Unity 2D ジャンプ」で検索すると問題無く動くコードは山ほど出るので勉強目的出なければ車輪の再開発はしない事をオススメします。
Minobato.com

2020/01/29 07:58

ブロックの件は分かりました…。すみません、気をつけます。 そして、JumpCommandをfalseにしている部分は、当たり判定側のスクリプトで管理させています。TouchBlockは、このバグの件とは関係無い物なので、削除しました。 ``` private void OnTriggerStay2D(Collider2D collision) { if (collision.gameObject.CompareTag("GroundBlock") || collision.gameObject.CompareTag("WhiteBlock") || collision.gameObject.CompareTag("RedBlock") || collision.gameObject.CompareTag("CloneBlock")) { if (GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerControllerScript>().JumpCommand) { GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerControllerScript>().JumpCommand = false; GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerControllerScript>().JumpCount = 0; } } } ```
nskydiving

2020/01/31 02:39

ご指摘いただいているコードブロックはコメント欄ではなく、質問欄のことです。 質問欄は「編集」ボタンから内容を変更することができますので、修正をお願いします。 尚、コメント欄ではコードブロックの「```」は使用できませんので、ご注意ください。
guest

回答1

0

ベストアンサー

Vector2 JumpForce = new Vector2(0.0f, Player_Speed * Jump_Speed);

ここで何故Player_Speedと乗算しているのですか?
2Dの場合、ジャンプはY軸の制御だけで可能です。

Vector2 JumpForce = new Vector2(Player_Speed, Jump_Speed);

多文、Player_SpeedはX軸に置くべきか、又は要らないと思います。

投稿2020/02/03 05:35

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Minobato.com

2020/02/04 18:27

Player_Speedを乗算させたせいで倍以上のジャンプが出ていたことが分かりました…。 ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問