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

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

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

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

Q&A

解決済

2回答

956閲覧

ダッシュ中の速度設定について

MiuMiu0526

総合スコア2

C#

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

0グッド

0クリップ

投稿2021/08/17 20:54

編集2021/08/18 03:34

移動の基本操作を

C#

1コード 2 //移動 3 4 //X軸方向に力を加える 5 rb2d.AddForce(Vector2.right * x * speed); 6 7 //歩くアニメーション 8 anim.SetFloat("Speed", Mathf.Abs(rb2d.velocity.x)); 9 10 //ダッシュキーが押されている&地面にいるなら、ダッシュ 11 if (Input.GetButtonDown("Run") & isGround) 12 { 13 anim.SetBool("IsRun", true); 14 } 15 16 if (Input.GetButtonUp("Run")) 17 { 18 anim.SetBool("IsRun", false); 19 } 20

としたとき、歩き時の速度制限を

C#

1コード 2 //速度ベクトルが4以上=4 3 if (Mathf.Abs(velx) > 4) 4 { 5 if (velx > 4.0f) 6 { 7 rb2d.velocity = new Vector2(4.0f, vely); 8 } 9 if (velx < -4.0f) 10 { 11 rb2d.velocity = new Vector2(-4.0f, vely); 12 } 13 }

このようなコードで処理しています。このとき、キャラクターがダッシュ中の場合は倍の速さで移動してもらえるように

C#

1コード 2 //速度ベクトルがX以上=X 3 if (Mathf.Abs(velx) > 4) 4 { 5 if (velx > 4.0f) 6 { 7 rb2d.velocity = new Vector2(4.0f, vely); 8 } 9 if (velx < -4.0f) 10 { 11 rb2d.velocity = new Vector2(-4.0f, vely); 12 } 13 } 14 15 else if ((Input.GetButtonDown("Run"))&& (Mathf.Abs(velx) > 4)) 16 { 17 if (velx > 4.0f) 18 { 19 rb2d.velocity = new Vector2(8.0f, vely); 20 } 21 if (velx < -4.0f) 22 { 23 rb2d.velocity = new Vector2(-8.0f, vely); 24 }

とコードを書き加えてみたのですが歩き時と同じスピードで走ります。
ダッシュ中には倍の速さになるように速度設定するにはどうすればよいですか?

追記

別途で「runspeed = 6;」を用意し、ダッシュ中はこの「runspeed」に切り替わるように下記のコード

C#

1コード 2 if (Input.GetButton("Run")) 3 { 4 speed = runspeed; 5 if (Mathf.Abs(velx) > 4) 6 { 7 if (velx > 4.0f) 8 { 9 rb2d.velocity = new Vector2(8.0f, vely); 10 } 11 if (velx < 4.0f) 12 { 13 rb2d.velocity = new Vector2(8.0f, vely); 14 } 15 } 16 } 17 else 18 { 19 if (Mathf.Abs(velx) > 4) 20 { 21 if (velx > 4.0f) 22 { 23 rb2d.velocity = new Vector2(4.0f, vely); 24 } 25 if (velx < 4.0f) 26 { 27 rb2d.velocity = new Vector2(4.0f, vely); 28 } 29 30 } 31 }

にしてみたところ、
X軸+向きの移動時:最大速度到達までの時間が遅くなったが、正しく動作してくれた。
X軸-向きの移動時:speedが3.0になったら0にリセットされてしまう。ダッシュ時、+方向に動いてしまう。
といった感じになりました。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/08/17 21:43

先の条件式でelseifより緩い制限の成否判定があるので、 このコードではelse ifのRunの条件式が成になる事はないのでは? 先のifとelse ifの内容を逆にすればどうでしょう
MiuMiu0526

2021/08/18 02:16

逆にしても、特に変化はありませんでした、、、
退会済みユーザー

退会済みユーザー

2021/08/18 02:24

条件を見るにGetButtonDownのDownも必要なさそうですね
MiuMiu0526

2021/08/18 02:42

二段ジャンプさせるときに、GetButtonの連射状態だと都合が悪かったので、GetButtonDownにした時の名残ですね笑 特に必要なかったので消しました
fiveHundred

2021/08/18 02:59

1570pさんの意見にある、 - ifとelse ifの内容を逆にする - GetButtonDownではなくGetButtonを使う の『両方』を修正すれば直りそうな気がしますが、それはやってみましたか? 特にGetButtonDownは「押されたときの1回」しか反映されないので、GetButtonに変更しないとむしろ上手くいかないと思います。
MiuMiu0526

2021/08/18 03:16

両方修正しても変化はなかったですね
MiuMiu0526

2021/08/18 03:35

追記で、他に試してみたことを載せました。
fana

2021/08/18 04:37

余計なお世話かもしれませんが,いたずらにコードをいじくる前に, 「この場合には→こうする」 っていうのを全部書き出してみた方がよいのでは. ダッシュ中か否か x 速度の範囲の種類 みたいな表でも書いてみるとか.
fiveHundred

2021/08/18 04:37

これらのコードは全て、Update()に書かれていますか?
guest

回答2

0

やりたいことは,これだけの話に見えます.

最大速度 = ( ダッシュ中 ? 8.0f : 4.0f ); if( 速度の絶対値 > 最大速度 ) { 速度 = ( 速度>0 ? 最大速度 : -最大速度 ); }

#そうでない場合,意図通りに動かないコードを複数バージョン延々と見せられたところで意図を読み取れないので,示すコードの各所に注釈で各処理の意図を明記するなど工夫されたい.

投稿2021/08/18 04:56

fana

総合スコア11996

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

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

0

自己解決

追記コードの等符号間違えてましたね

投稿2021/08/19 12:54

MiuMiu0526

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問