fc2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】【C#】ゲームパッドの右スティックを使えるようにする

【Unity】【C#】ゲームパッドの右スティックを使えるようにする  


 基本的にはこちらの資料そのままという感じだが、もっとざっくりと視覚的に見たいときの自分用メモ。なので詳しく知りたいときは以下の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」ボックスが出る


●右スティックをそれぞれ利用する方向へ倒すと(上or下/左or右)登録される


 尚「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 でのコールバック実装方法とインスペクタでの登録


関連記事
スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityリファレンス  InputManager 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/349-65d6f885
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop