概要
2014/2/19 に「InControl」がリリースされました
「InControl」を導入すると、Xbox 360 や PS3、PS4 などのコントローラの入力制御を
簡単に実装できるようになります
この記事では、Unity プロジェクトに「InControl」を導入して
Nintendo Switch のプロコン(Pro コントローラー)を
簡単に使えるようにする方法を紹介していきます
検証環境
- Unity 2017.4.0f1
- InControl 1.6.17
プロコンを PC に接続する方法
こちらのページに記載しております
初期設定
「InControl」を Unity プロジェクトに導入したら Unity メニューの
「Edit>Project Settings>InControl>Setup InputManager Settings」を選択します
Console ウィンドウや Unity エディタの左下に
「InControl has successfully generated new InputManager settings.」と表示されたら
初期設定が完了です
接続確認
「TestInputManager」シーンを開いて Unity を再生すると、
プロコンが正しく接続できているかどうかが確認できます
ボタンを押したりスティックを倒したりすると、正常に判定されていることがわかります
使い方
ここからは実際にゲームに組み込んでいく方法を紹介していきます
Unity メニューの「GameObject>Create Other>InControl>Manager」を選択して、
「InControl」オブジェクトを作成します
そして、作成した「InControl」オブジェクトを選択して
「Enable Native Input (Mac/Windows only)」をチェックします
using InControl;
次に、プロコンの入力制御を実装したいコードの先頭に上記の using を追加します
そして、下記のようなコードを記述することで、
ボタンが押されたかどうかの判定や、スティックの傾きの取得ができます
以上が基本的な使い方になります
ボタンの判定
var ad = InputManager.ActiveDevice; if ( ad.Action2.WasPressed ) print( "押された" ); if ( ad.Action2.IsPressed ) print( "押されている" ); if ( ad.Action2.WasReleased ) print( "離された" );
ボタンの判定は上記の 3 パターンで判定できます
コントローラの接続・解除の検知
InputManager.OnDeviceAttached += device => { print( "接続:" + device.Name ); }; InputManager.OnDeviceDetached += device => { print( "解除:" + device.Name ); }; InputManager.OnActiveDeviceChanged += device => { print( "アクティブ変更: " + device.Name ); };
ゲーム中にコントローラが接続されたかどうか、解除されたかどうかは
上記のようにイベントを使用して検知することができます
スティックが倒された時に true を返す拡張メソッド
ソースコード
using InControl; public static class OneAxisInputControlExt { public static bool IsDown ( this OneAxisInputControl self, float value = 0.5f ) { return value <= self.Value && self.LastValue <= value ; } }
使用例
var ab = InputManager.ActiveDevice; // 左スティックが上に倒された if ( ab.LeftStickUp.IsDown() ) { }
スティックでメニューを選択するような機能を実装する時に
上記のような拡張メソッドを定義すると役に立ちます