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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2512閲覧

Unityの2Dアクションゲームで二段ジャンプを実装できない

NBB

総合スコア2

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/06/18 04:14

前提・実現したいこと

横スクロールアクションゲームを開発しているのですが、二段ジャンプが上手くできません。
やりたいことは以下のこととなります。
・ジャンプボタンを1回押して、ジャンプ中に更にもう1回押したときに2回目のジャンプをする。
・最大は2回とし、3回目はジャンプさせない。

発生している問題・エラーメッセージ

1回目のジャンプをした際にjumpCountをインクリメントさせて、
2回目を押した際にjumpCountが"1"になっているので2回目のアクションを行う想定ですが、
すぐにjumpCountが反映されていないのか、実際には
「1回目の処理 → 1回目の処理 → 2回目の処理」
となってしまい、結果的に三段ジャンプになってしまいます。

該当のソースコード

void Update() { if (Input.GetButtonDown("Jump") && jumpCount == 0) { jumpCount++; animator.CrossFadeInFixedTime("Jump", 0.38f); rigidBody2D.velocity = Vector3.up * jumpPower; } else if (Input.GetButtonDown("Jump") && jumpCount == 1) { jumpCount++; animator.CrossFadeInFixedTime("doublejump", 0.35f); rigidBody2D.velocity = Vector3.up * 3; } }

試したこと

jumpCount++の位置をアニメーションの前後にする、
Bool型のフラグで管理したりも試しましたが、同様の動きになってしまいます。

補足情報(FW/ツールのバージョンなど)

Unity 2021.1.9f1

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

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

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

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

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

guest

回答1

0

ベストアンサー

手元で試してみたんですが特に3段ジャンプは再現しなかったです。
Debug.Logなどを使ってjumpCountの増え方をチェックしてみて、どういう処理をしているか追ってみるのはどうでしょうか。(0>1のとき増えているのか、1>2のときダブっているのか、ジャンプするたびにjumpCountを出力するようにして数字の増え方は正しいのか 等)
あとはjumpCountを一旦publicな変数にすると、インスペクター上から変数が表示されてデバッグしやすいのでそれでもデバッグできます。

他の要因でバグを起こしている可能性もあるので、デバッグ用に新しいSceneを作って
Cubeとかでアニメーションもなしで一旦、ダブルジャンプが動くか試す→キャラクターだけ置いてダブルジャンプを試す。と段階的にデバッグしていくのも有効です。


(たぶん提示ソースでもちゃんと飛べると思うので、これでも解決しないかもしれませんがご提案の一つとして)
明確に2回までと決まってるなら、jumpCountが2以上ならジャンプ処理させないとかではどうですかね?
ちなみに1個にまとめたのは、ジャンプボタンを押した処理が一つの{}にまとまるので個人的に好きなだけなので分けなくても大丈夫です

cs

1 void Update() { 2 // ジャンプ処理 3 if (Input.GetButtonDown("Jump")) { 4 5 // もう2回ジャンプしてるならジャンプ不可 6 if (jumpCount >= 2) return; 7 8 9 if (jumpCount == 0) { 10 // 初回ジャンプ 11 rigidBody2D.velocity = Vector3.up * jumpPower; 12 //animator.CrossFadeInFixedTime("Jump", 0.38f); 13 Debug.Log("1回目ジャンプ: " + jumpCount); 14 } else { 15 // ダブルジャンプ 16 rigidBody2D.velocity = Vector3.up * 3; 17 //animator.CrossFadeInFixedTime("doublejump", 0.35f); 18 Debug.Log("2回目ジャンプ: " + jumpCount); 19 } 20 21 jumpCount++; 22 } 23 }

投稿2021/06/18 05:09

編集2021/06/18 05:20
hogefugapiyo

総合スコア3302

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

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

NBB

2021/06/18 13:39

ご丁寧にソースコードまでありがとうございました! jumpCountをpublicにしてカウントの動きを見たところ、地面に着地したらjumpCountを0にするという処理が悪さをしていたようでした。 この処理を見直して実装したいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問