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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

1508閲覧

Rigidbody2Dを利用したジャンプ機能について

GOTOken

総合スコア54

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2018/08/20 09:45

編集2018/08/20 10:00

スクリプトの不具合??仕様??

c#

1 private void FixedUpdate() 2 { 3 4 float x = Input.GetAxisRaw("Horizontal"); 5 6 if (Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown(KeyCode.Joystick1Button1)) 7 rb2d.AddForce(Vector2.up * jumpPower); 8 //左か右を入力したら 9 if (x != 0) 10 { 11 rb2d.velocity = new Vector2(x * spped, rb2d.velocity.y); 12 Vector2 temp = transform.localScale; 13 if (x < 0.1 || x > -0.1) 14 temp.x = Mathf.Sign(x); 15 transform.localScale = temp; 16 } 17 else 18 { 19 rb2d.velocity = new Vector2(0,rb2d.velocity.y); 20 } 21 } 22

以下のような書き方をし、ジャンプの挙動の実装を試みました。ですが、Rigidbodyの仕様なのか、唐突に大ジャンプを繰り広げるときがあります。この場合の解決方法はどのようなものがあるのかご教授していただけると嬉しいです。

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

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

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

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

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

fiveHundred

2018/08/20 09:52

前後のソースコードも記載した方がよろしいかと思います。「jumpPowerが意図せずに変わっている」とか「AddForce()が複数回呼ばれている」とか考えられますので。
guest

回答1

0

ベストアンサー

FixedUpdate()ではInputクラスの関数は使用しないでください。
意図しない動作の原因になります。

Inputクラスを使う場合は、以下のようにUpdate()内で行ってください。

C#

1 private float x = 0f; 2 private bool keyDown = false; 3 4 private void Update() 5 { 6 x = Input.GetAxisRaw("Horizontal"); 7 if (Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown(KeyCode.Joystick1Button1)) 8 { 9 keyDown = true; 10 } 11 } 12 13 private void FixedUpdate() 14 { 15 if (keyDown) 16 { 17 rb2d.AddForce(Vector2.up * jumpPower); 18 keyDown = false; // 未入力の状態に戻す 19 } 20 //左か右を入力したら 21 if (x != 0) 22 { 23 rb2d.velocity = new Vector2(x * spped, rb2d.velocity.y); 24 Vector2 temp = transform.localScale; 25 if (x < 0.1 || x > -0.1) 26 temp.x = Mathf.Sign(x); 27 transform.localScale = temp; 28 } 29 else 30 { 31 rb2d.velocity = new Vector2(0,rb2d.velocity.y); 32 } 33 }

投稿2018/08/20 10:13

fiveHundred

総合スコア9801

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問