Help us understand the problem. What is going on with this article?

TorqueL(トルクル) Windows版における入力デバイス検知の実装について

本記事の内容をはてなブログに転記しました。
すぐにQiitaの記事を削除する予定はありませんが、どちらか一方だけ残すとなったらはてなブログの方を残すと思います。
ご承知おき下さい。

TorqueLのWindows版では入力デバイスがキーボードがゲームパッド(ジョイスティック)かで一部の画面表示を動的に切り替える仕組みを入れています。
この記事は「入力デバイスをどのように検知しているか」の説明です。

torquel_detectinputdevice.gif

まとめ

Unity 4.3のInputManager経由の入力は使わず、publicのenumでデバイスを仮想的に定義(InputDevice)し、KeyCodeから判断するように実装しています。
(※軸/Axis系はInputManger経由でしか取れなかったのでそのまま)

以下、仮想コード

public class hogeinput : MonoBehaviour {
    public enum InputDevice {None, Keyboard, Mouse, Joystick, Unknown};
    public static InputDevice LastInputDevice { get{return lastInputDevice;} }
    static void detectInputDevice( KeyCode kc) {
        int keycode = (int)kc;
        if ( keycode == 0 ) {
            //None
            lastInputDevice = InputDevice.None;
        }
        else if ( keycode >= 8 && keycode <= 319 ) {
            //Keyboard (8=Backspace, 319=Menu)
            lastInputDevice = InputDevice.Keyboard;
        }
        else if ( keycode >= 323 && keycode <= 329 ) {
            //Mouse Button 0-6
            lastInputDevice = InputDevice.Mouse;
        }
        else if ( keycode >= 330 && keycode <= 429 ) {
            //Joystick Button
            //ex:joystick 330-349, joystick1 350-369, joystick2 370-389, joystick3 390-409, joystick4 410-429
            lastInputDevice = InputDevice.Joystick;
        }
        else {
            //Unknown
            lastInputDevice = InputDevice.Unknown;
        }
    }
}

キーコードの詳細は http://docs.unity3d.com/jp/current/ScriptReference/KeyCode.html を参照のこと。

製品で動いてる実装では同じクラス内に独自実装したボタン割り当てとボタン入力受付関数からdetectInputDevideを毎回呼ぶようにして、Updateで入力デバイスをチェックしつつもうひとつ前のlastInputDeviceを保持する変数を用意して入力デバイスが切り替わったことが検知できるようにしていたりします。
(ボタンの割当周りの実装については別記事予定)

上の実装だとキーボードかゲームパッドかぐらいしか検知していませんので、例えば「360のパッドとDUALSHOCK4で自動的に分けられるようにしたい」という時はInput.GetJoystickNames()で入力のあったジョイスティックのデバイス名(デバイスとプリンターで表示されてる名前)をチェックするようにするといいんじゃないかと思います(ただあまり現実的じゃないかも)

nanmo
なんだかいろいろありましたが、株式会社時雨堂代表取締役社長とFullPowerSideAttack[.]com代表を務めています。色々作ります、色々。TorqueL(トルクル)とかいろかたおりがみとか。
http://FullPowerSideAttack.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away