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

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

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

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

Q&A

解決済

1回答

5647閲覧

キーを離した時ピッタリ動きを止めたい

Ayber

総合スコア8

C#

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

0グッド

0クリップ

投稿2020/03/03 20:38

前提・実現したいこと

こちらのサイトを見ながら現在横スクロールアクションゲームを作っています。
https://dkrevel.com/makegame-beginner/make-2d-aciton-move

こちらに掲載されている"ボタンを押された時速度を与えるように変更したスクリプト"を書いて実装したところ、
動き始めはボタンを押した瞬間から動くのですが、ボタンを離した時僅かに遅れて停止します。
スクリプト内の
if (horizontalKey > 0)

if (horizontalKey >= 1)
にしたところ、今度は動き始めはズレてボタンを離した瞬間止まりました。(左移動のプログラムも同様です)

horizontalKeyというのは、一瞬で0と1を切り替えるのではなく
押してるとき0,0.1,0.2,0.3,...,1
離した時1,0.9,0.8,0.7,...,0
みたいに徐々に数値が増減するものなのでしょうか?

また現在
if (horizontalKey > 0)
を丸ごと
if (Input.GetKey("right"))(左移動のプログラムも同様です)
にすることで問題なく動作していますが、このサイトの通りhorizontalKeyを使って
キャラクターをピッタリ動かし、ピッタリ止めるにはどうすればよいでしょうか?

該当のソースコード

C#

1using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class Player : MonoBehaviour 6 { 7 //インスペクターで設定する 8 public float speed; 9 10 //プライベート変数 11 private Animator anim = null; 12 private Rigidbody2D rb = null; 13 14 void Start() 15 { 16 //コンポーネントのインスタンスを捕まえる 17 anim = GetComponent<Animator>(); 18 rb = GetComponent<Rigidbody2D>(); 19 } 20 21 void Update() 22 { 23 //キー入力されたら行動する 24 float horizontalKey = Input.GetAxis("Horizontal"); 25 float xSpeed = 0.0f; 26 if (horizontalKey > 0) 27 { 28 transform.localScale = new Vector3(1, 1, 1); 29 anim.SetBool("run", true); 30 xSpeed = speed; 31 } 32 else if (horizontalKey < 0) 33 { 34 transform.localScale = new Vector3(-1, 1, 1); 35 anim.SetBool("run", true); 36 xSpeed = -speed; 37 } 38 else 39 { 40 anim.SetBool("run", false); 41 xSpeed = 0.0f; 42 } 43 rb.velocity = new Vector2(xSpeed, rb.velocity.y); 44 } 45}

試したこと

if (horizontalKey > 0)
を丸ごと
if (Input.GetKey("right"))(左移動のプログラムも同様です)
にすることで問題なく動作しています

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

該当サイト
https://dkrevel.com/makegame-beginner/make-2d-aciton-move

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

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

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

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

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

guest

回答1

0

ベストアンサー

ご推察のとおり、Input.GetAxisのリファレンスの一番下に...

Note: The Horizontal and Vertical ranges change from 0 to +1 or -1 with increase/decrease in 0.05f steps. GetAxisRaw has changes from 0 to 1 or -1 immediately, so with no steps.

との注意書きがありました。これに従って、代わりにInput.GetAxisRawを使ってみてはいかがでしょうか?

投稿2020/03/03 22:04

Bongo

総合スコア10807

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

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

Ayber

2020/03/04 18:19

無事解決しました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問