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

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

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

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

2回答

2300閲覧

UnityVelocityを使った後の慣性をなくしたい。

mcbkar

総合スコア7

Unity

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2022/01/10 23:14

編集2022/01/11 13:31

前提・実現したいこと

Unityでvelocityを使った移動の後の慣性をなくしたいです。
https://teratail.com/questions/105824 にもある通り解決策はわかるのですが、自分のコードに対して有効な解決法ではなかったです。

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

移動後に慣性が発生する。

該当のソースコード

C#

1void FixedUpdate(){ 2 float horizontalKey = Input.GetAxis("Horizontal"); 3 float verticalKey = Input.GetAxis("Vertical"); 4 float xSpeed = 0.0f; 5 float ySpeed = 0.0f; 6 if (horizontalKey > 0){ 7 xSpeed = speed; 8 } else if (horizontalKey < 0){ 9 xSpeed = -speed; 10 } else{ 11 xSpeed = 0.0f; 12 rb.velocity = Vector2.zero; 13 } 14 if (verticalKey > 0){ 15 ySpeed = speed; 16 } else if (verticalKey < 0){ 17 ySpeed = -speed; 18 } else{ 19 ySpeed = 0.0f; 20 } 21 22 rb.velocity = new Vector2(xSpeed, ySpeed); 23 } 24} 25

試したこと

ifのおかげでこの問題が発生していると睨んだので、<0を<1にしたりしましたが、そうしたら今度は初動が遅くなってしまいました。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

Input.GetAxisをInput.GetAxisRawに変えれば想定している動きになると思います。

Input.GetAxisから得られるfloatは「入力中は1(-1)になるまで徐々に増えて、入力終了時は0になるまで徐々に減る」という挙動を行います。
今回のケースでいうと、入力を止めた後もInput.GetAxisは数フレームは0以上(以下)をKeyに流しているので、その間もvelocityに数字が入り続けています。

Input.GetAxisRawはそのような補正をかけず、純粋に1と0のみ返します。

投稿2022/01/11 04:23

UnchFullburst

総合スコア663

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

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

UnchFullburst

2022/01/11 07:22

rb.velocity = new Vector2(horizontalKey, verticalKey );として動かして見れば、InputGetAxisがどう動いてるか分かりやすいと思います。
mcbkar

2022/01/11 13:29

GetAxisRawにしたところ想定した動きになりました! Unity触り始めてからの悩みが解決しました! ありがとうございます!
guest

0

コード自体は問題なさそうなので(rb.velocity = Vector2.zero;する必要あるのかは謎ですが)
Input Managerの設定を調整することで解決できそうな気がします
該当の入力設定のとこの、Gravityの値をいじってみるとか?

投稿2022/01/11 00:23

kyooo_

総合スコア104

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問