移動の基本操作を
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にリセットされてしまう。ダッシュ時、+方向に動いてしまう。
といった感じになりました。
先の条件式でelseifより緩い制限の成否判定があるので、
このコードではelse ifのRunの条件式が成になる事はないのでは?
先のifとelse ifの内容を逆にすればどうでしょう
逆にしても、特に変化はありませんでした、、、
条件を見るにGetButtonDownのDownも必要なさそうですね
二段ジャンプさせるときに、GetButtonの連射状態だと都合が悪かったので、GetButtonDownにした時の名残ですね笑
特に必要なかったので消しました
1570pさんの意見にある、
- ifとelse ifの内容を逆にする
- GetButtonDownではなくGetButtonを使う
の『両方』を修正すれば直りそうな気がしますが、それはやってみましたか?
特にGetButtonDownは「押されたときの1回」しか反映されないので、GetButtonに変更しないとむしろ上手くいかないと思います。
両方修正しても変化はなかったですね
追記で、他に試してみたことを載せました。
余計なお世話かもしれませんが,いたずらにコードをいじくる前に,
「この場合には→こうする」
っていうのを全部書き出してみた方がよいのでは.
ダッシュ中か否か x 速度の範囲の種類 みたいな表でも書いてみるとか.
これらのコードは全て、Update()に書かれていますか?
回答2件
あなたの回答
tips
プレビュー