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

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

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

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

Q&A

解決済

2回答

499閲覧

キーを押した長さに応じてジャンプする高さを変えたい。

Tomoria

総合スコア61

C#

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

0グッド

1クリップ

投稿2022/05/26 08:34

前提

二段ジャンプできます。

実現したいこと

キーを押した長さに応じてジャンプする高さを変えたいです。

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

ジャンプが終わった後に速度が不自然に減速したり、逆にそのまま飛べたりしてしまいます。

該当のソースコード

c#

1 void Update() 2 { 3 isGround = ground.IsGround(); 4 if (isGround == true) 5 { 6 isstage = 0; 7 } 8 9 if (Input.GetKeyDown(KeyCode.UpArrow)) 10 { 11 Jump(); 12 } 13 if (Input.GetKey(KeyCode.UpArrow)) 14 { 15 //ここが問題の箇所です。 16 if (timer + 0.3 >= Time.time & isstage < 2) 17 { 18 i.velocity = new Vector2(i.velocity.x, 1); 19 this.i.AddForce(transform.up * yspeed); 20 } 21 } 22 } 23 24 void Jump() 25 { 26 if (isstage < 1) 27 { 28 timer = Time.time; 29 Playercontroler.dashcan = true; 30 i.velocity = new Vector2(i.velocity.x, 1); 31 this.i.AddForce(transform.up * yspeed); 32 isstage++; 33 } 34 }}

試したこと

Time.deltaTimeをかけてみましたが、なんか違いました。
どうすればよいでしょうか。

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

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

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

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

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

y_waiwai

2022/05/26 09:11

どういう動作をさせたいのかもちっと詳しく説明しよう
bboydaisuke

2022/05/26 09:15

実現したい事と問題が関係ない事を扱ってます。 問題がなぜ起きているかというと、AddForce でジャンプさせているからです。ジャンプでそういう問題を起こしたくないならば、velocity でジャンプさせなければいけません。
Tomoria

2022/05/26 09:37

コメントありがとうございます。velocityで頑張ってみます!
guest

回答2

0

自己解決

addforceを無くしてvelocityを使いました。

投稿2022/05/26 09:43

Tomoria

総合スコア61

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

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

0

問題については追記・修正依頼の方に書いたので、実現したい事についてはこちらに書きます。

csharp

1using UnityEngine; 2 3[RequireComponent(typeof(Rigidbody2D))] 4public class JumpEx : MonoBehaviour 5{ 6 [SerializeField] float _moveSpeed = 3f; 7 [SerializeField] float _jumpSpeed = 3f; 8 [SerializeField] float _attenuation = .1f; 9 Rigidbody2D _rb = default; 10 bool _isGround = false; 11 Vector2 _velocity = default; 12 bool _isJumpButtonPressed = false; 13 14 void Start() 15 { 16 _rb = GetComponent<Rigidbody2D>(); 17 } 18 19 void Update() 20 { 21 float h = Input.GetAxisRaw("Horizontal"); 22 _velocity = _rb.velocity; 23 _velocity.x = h * _moveSpeed; 24 _isJumpButtonPressed = Input.GetButton("Jump"); 25 26 if (Input.GetButtonDown("Jump") && _isGround) 27 { 28 _velocity.y = _jumpSpeed; 29 } 30 31 _rb.velocity = _velocity; 32 } 33 34 void FixedUpdate() 35 { 36 if (!_isGround && _rb.velocity.y > 0 && !_isJumpButtonPressed) 37 { 38 _velocity.y *= _attenuation; 39 _rb.velocity = _velocity; 40 } 41 } 42 43 void OnTriggerEnter2D(Collider2D collision) 44 { 45 _isGround = true; 46 } 47 48 void OnTriggerExit2D(Collider2D collision) 49 { 50 _isGround = false; 51 } 52}

イメージ説明

投稿2022/05/26 09:40

bboydaisuke

総合スコア5275

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

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

Tomoria

2022/05/26 09:56

なるほど!こんなにコンパクトになるんですね。参考にさせて頂きます。 ご回答ありがとうございました!
Tomoria

2022/05/26 12:03

すみません、ダブルでイラっとさせていた訳ですね。日本語って難しい
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問