今回はUnityのInputManagerの操作キーの入力設定を変更して、ゲームのキャラクターの操作性を変更してみます。
キーの入力をやめたらすぐさま入力値を0にしたい時等はInputManagerの設定を変更する必要があります。
設定自体は簡単ですぐ出来ますし、Unityを実行中にInputManagerの値を変更してお気に入りの操作性を探すといいと思います。
InputManagerの設定を変更する
InputManagerは
↑のようにUnityメニュー→Edit→Project Settings→Inputを選択するとインスペクタに表示されます。
↑がHorizontal(標準設定では移動キーの横に対応)のジョイスティックの横の設定になります。
入力キーの設定等は
等で記述しているので割愛します。
その他の設定は
Gravityはキーを離してから0に戻るまでの秒速
Deadは指定した値以下のキー入力値だった時は0にする設定
Sensitivityはターゲットの入力値になるまでの秒速
Snapにチェックを入れると反対方向のキーを押した時に値が0になる
Invertにチェックを入れるとキーの入力が反対になる
となっています。
一般的なゲーム入力 - Unity マニュアルUnity はキーボード、ジョイスティック、ゲームパッド入力をサポートします。
つまり
移動キーを離した時にすぐに移動をやめたい時はGravityの値を大きくし0に戻る速さを早めます。
Input.GetAxis等で細かい入力値を取得している時に一定の値以下の入力値は0にしたい時はDeadを使います。
Input.GetAxis(“Horizontal”)の最大値は1ですが、この値に早く近づけたい時はSensitivityの値を大きくします。
ジョイスティックのSensitivityの値を大きくしすぎるとジョイスティックの移動キーを離しても動いてしまったのでここは気をつけないといけないかもしれません。
違いを試す場合は実行中にInputManagerのGravity、Dead、Sensitivityの値を変更して試すのがいいと思います(デフォルトの値を書き変えない為)。
操作感に関してはGIF動画では確認出来ない為ご自分の環境で試してみてください。(^_^;)
移動キーに関してはHorizontal(横)、Vertical(縦)の設定があり、それぞれジョイスティックとキーの設定があるので、ジョイスティックだけでなくキー操作でもキャラクターを動かす場合はキーのHorizontalやVerticalの設定も変更しておくといいと思います。
Input.GetAxisで細かい値を使用しない場合
キャラクターの操作ではInput.GetAxis(“Horizontal”)やInput.GetAxis(“Vertical”)で入力値を指定している方がほとんどだと思いますが、
Input.GetAxisは連続値を取得する時に向いていて-1から1の間の細かい小数点を取得する事が出来ます。
つまりジョイスティックの傾けをほんの少しにした場合は0.1・・・という値が返ってくるわけです。
ですが、この細かい値を使わず入力が発生した時は-1、0、1の値の3つだけを取得して操作したい事もあると思います。
Horizontalを例にすると→に動かしたら1、←に動かしたら-1、動かさない時は0の値を取得出来るようにしたい時です。
そんな時はInput.GetAxisではなく
1 2 3 4 | float input = 0f; input = Input.GetAxisRaw("Horizontal"); |
とInput.GetAxisRawを使うと整数値を取得する事が出来ます。
ただし、↑のスクリプトでinputをfloatとしているのでお分かりの方もいると思いますが、Input.GetAxisRawでなぜか小数点が返ってきています・・・(^_^;)
値はキーボードとジョイスティックの入力によって-1 から 1 の範囲になります。 入力がスムーズになっていないので、キーボード入力はいつも -1、0、1 のどれかになります。 これは全てのキーボード入力の平衡化フィルターを自前で処理したい場合に便利です。
https://docs.unity3d.com/ja/current/ScriptReference/Input.GetAxisRaw.html
とマニュアルに記述されてはいるんですが、うーんなんでだろ?(^_^;)
InputManagerのSensitivityの値を10ぐらいにするとほぼ-1、0、1の値が返ってきます(時たま小数点あり)がこれだとInput.GetAxisでも同じなので使い分けする必要がないかもしれません。
ああ・・・・マニュアルをよく読んでみるとInput.GetAxisRawで-1、0、1の値が返ってくるのはキーボードで入力した時だけなのね・・・納得・・・(^_^;)
読み取り能力が衰えてるね・・・・((+_+))
Input.GetAxisを使ってジョイスティックの入力値を整数で取得したい場合は
1 2 3 4 5 6 7 8 9 10 11 | float input = 0f; input = Input.GetAxis("Horizontal"); if(input > 0f) { input = 1f; } else if(input < 0) { input = -1f; } else { input = 0f; } |
と単純に条件文で分岐させて入力値を整数値に変更するといいかもしれません。
キャラクター操作でもっさりした感じがしていた方はInputManagerの設定やスクリプトの変更を試してみてはいかがでしょうか?
それでは今回はこのへんで終わります。