【Unity】【C#】ゲームパッドの右スティックを使えるようにする 
2020/04/04 Sat [edit]
基本的にはこちらの資料そのままという感じだが、もっとざっくりと視覚的に見たいときの自分用メモ。なので詳しく知りたいときは以下のURLを参照して欲しい。まぁ、内容的に難しくはないのだが、実は「ゲームパッドの機器によって設定が異なる」という問題があることを知ったので、コードより手順の方を簡単に書いておこうかと。
・Unityでゲーム開発 -左右スティックを使う方法-
(※) Unity 2019.2.21f1 / Windows10(x64) で確認
■InputManager で右スティック用設定を作っておく
まずは、メニューから「Edit>Project Settings...」を開き、左のタブから「Input」を選択する。
そしたら、一番上の「Size」を+2個し、右スティック用の設定を作る(※水平・垂直2方向の場合)。
名前「Name」はコードで使うので、自分でわかりやすい名前を付けておく。
ここでは「Axis」の項目で「4th axis(Joystick)」「5th axis(Joystick)」を選択しているが、ここが前述した「機器によって違う」項目であり、ランタイム時にユーザーに設定して貰うしかないので、とりあえず開発テスト用の機器に合わせたもので良い(わからなければ、この設定でも良い。※ここでは「Logicool Rumble Gamepad F510」を使用例に用いている)。
注意点としては「Invert」(値の正負反転)はオフにしておいた方が良いだろう。これもゲームパッド機器によって違うので、アプリ内で設定できるようにしておく必要がある。
■右スティックをコードで取得する
先ほど InputManager で付けた名前を使って、コードから入力値を取得する。取得できる値の範囲は -1~0~+1 だ。「Invert」がオンになっている場合は、正負が反転する。ここでは InputManager での「Invert」はオフであるとして、アプリ内にユーザーが設定できる UI などを置いて、それがオン・オフできると仮定しておこう(UI-Toggle.isOn 等が簡単)。そしてそれらをプロパティで表わすとする。尚、私は「Logicool Rumble Gamepad F510」という機器を使ってテストしているので、それに合わせてデフォルト値を設定しているが、開発環境によって任意で良い。
●右スティックの入力を取得する例(※ .NET 4.x 以降)
using UnityEngine;
//反転オプションプロパティ (※Logicool Rumble Gamepad F510 でのデフォ例。任意で良い)
bool InvertH { get; set; } = false; //水平方向反転オプション (UI などでユーザー設定できるようにしておく)
bool InvertV { get; set; } = true; //垂直方向反転オプション (UI などでユーザー設定できるようにしておく)
//右スティックの入力による方向の取得
float h = Input.GetAxis("HorizontalStickR"); //水平方向 ※InputManager で付けた名前
float v = Input.GetAxis("VerticalStickR"); //垂直方向 ※InputManager で付けた名前
Vector2 dir = new Vector2(h * (InvertH ? 1 : -1), v * (InvertV ? 1 : -1));
//方向による処理など・・・
Debug.Log($"h = {h}, v = {v}, dir = {dir}");
もちろん、Input.GetAxis() の代わりに Input.GetAxisRaw() を用いても良い。その場合は中間値がなく、値が -1, 0, +1 のいずれかになる(つまり量がなく、方向だけ取得する感じになる)。
■アプリ起動前のダイアログで右スティックを設定する
なんからのテストできるものを作ったら、アプリをビルドしてみよう。
右スティックを設定するには、起動時に出るダイアログで「Input」タブに切り替え、InputManager で付けた名前をダブルクリックする。そしたら「Input Configuration」の小さなボックスが出るので、このときに、右スティックを利用する方向へ倒せば登録される(表示も変わる)。この操作をユーザーにやって貰う必要がある(なので、説明書とか必要だよね…)。
登録完了したら、「Play!」してアプリ内で確認してみよう。
尚「Input Configuration」で設定した値は、レジストリ(Windows)で「__Input Joystick Axis HorizontalStickR_~」のように記録されているようだ(axis3 なら値は3 のように)。なので、一度設定したら、毎回設定する必要なく、継続して使える。
(関連記事)
【Unity】【C#】CapsLock のオン・オフ状態を取得する (Windows)
【Unity】5ボタンマウスの KeyCode 図解
【Unity】【C#】KeyCode をリアルタイムで調べる / Windows 日本語キーボードでの記号の KeyCode 一覧
【Unity】【C#】スワイプ(フリック)を判定、方向を取得してコールバックする
【Unity】【C#】長押し(ロングタップ)を取得してコールバックする
【Unity】【C#】UnityEvent, Action, delegate, interface でのコールバック実装方法とインスペクタでの登録
- 関連記事
-
-
【Unity】【C#】InputSystem で Android のバックキーの isPressed がなぜか一定時間で false になる?
-
【Unity】【C#】Android で VRM(VRoid)を動的に読み込む
-
【Unity】【C#】FPS(フレームレート)をリアルタイムに測定して表示するv2(4隅選択可能で、画面サイズの変更にも対応版)
-
【Unity】InitializeUnityExtensions: Must have a valid path for the plugin [XX] (XX:番号) というエラーの修正方法
-
【Unity】Androidのハードウェア音量操作・ハードウェアキーの無効化をする
-
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/349-65d6f885
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |