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

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

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

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

Unity

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

Q&A

解決済

1回答

990閲覧

モバイルスティック上入力でジャンプするとジャンプ高さが不安定になる(Unity2D)

kanata_02

総合スコア25

C#

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

Unity

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

0グッド

0クリップ

投稿2019/07/16 17:08

前提・実現したいこと

Unity2Dでモバイルジョイスティック上入力をしたときにキャラクターをジャンプさせたいのですが、天井が低くなっている場所などでジャンプした後スティックを上に入力したままにしておくと、障害物がない場所でも低い天井の高さまでしかしかジャンプしなくなり、入力をいったんやめて再度ジャンプすると通常は画面半分ほどまでしかジャンプしないはずが倍ぐらい高くジャンプしてしまいます。
スペースキーでジャンプした場合はこの不具合は起こりませんでした。

これらを解消して障害物のない場所では通常の高さでジャンプするようにしたいです。
何かアドバイスいただければ幸いです。よろしくお願いします。

接地判定やジャンプ方法などこちらのサイトを参考にさせていただいております。
https://hiyotama.hatenablog.com/archive/category/%E6%A8%AA%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

該当のソースコード

C#

1void FixedUpdate() 2 { 3 //地面との当たり判定 4 isGrounded = Physics2D.Linecast( 5 transform.position + transform.up * 1, 6 transform.position - transform.up * 1, 7 groundLayer); 8 9 //ジャンプ 10 if (!gameover && !gameclear && !pause.activeSelf) 11 { 12 if (CrossPlatformInputManager.GetAxisRaw("Vertical") == 1.0f || Input.GetKeyDown("space")) 13 { 14 if (isGrounded) 15 { 16 anim.SetBool("Dash", false); 17 anim.SetTrigger("Jump"); 18 19 isGrounded = false; 20            21           //property.getNowConditionJumpPower()=700 22 rigidbody2D.AddForce(Vector2.up * property.getNowConditionJumpPower()); 23 24 } 25 } 26 27 float velY = rigidbody2D.velocity.y; 28 29 bool isJumping = velY > 0.1f ? true : false; 30 bool isFalling = velY < -0.1f ? true : false; 31 32 anim.SetBool("isJumping", isJumping); 33 anim.SetBool("isFalling", isFalling); 34 } 35 36 //以下省略 37

試したこと

元々Updateに記述していたジャンプ処理をfixedupdateに移動させてみましたが効果はありませんでした。
二段ジャンプしてしまっているのかと思い接地判定を見直し、Debug.Logで確認してみましたがジャンプ中は常にfalseになっていました。
ジャンプ中JumpPowerが増えてしまってるのかと確認しましたが700のままでした。
CrossPlatformInputManager.GetAxisRaw("Vertical") == 1.0fの数値を変え入力の判定を変えてみましたが不具合は変わりませんでした。

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

Unity2018.3.5f1

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

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

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

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

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

sakura_hana

2019/07/17 11:21

「スペースキーでは平気」ということなので、差があるとしたら「Input.GetKeyDownは押された1フレームだけ条件を満たす」「〜GetAxisRawは押している間ずっと条件を満たす」だと思います。 そしてこのisGroundedの判定だと「地上0m〜1mの間にいる時は着地している」と見なされる気がします。 なので何らかの方法で〜GetAxisRawを1フレーム分だけ取得する(入力値を変数に持っておくとか)か、isGrounded判定をするLinecastの距離調整(*1を*0.1とかの小さい値にすればいける?)を試してみてください。
kanata_02

2019/07/21 07:48

返信遅くなりました。変数を作成しGetAxisRawを1フレーム分だけ取得するやり方で解決しました!ありがとうございます!
guest

回答1

0

自己解決

sakura_hana様のご指摘の通り、変数を作成しGetAxisRawを1フレーム分だけ取得することで解決しました。

投稿2019/07/30 06:33

kanata_02

総合スコア25

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問