How to | ゲームパッド等のデバイスをWolframシステムに接続する方法

Wolframシステムは,キーボードやマウスによってだけではなく,ジョイスティック,ゲームパッド,3Dマウス,あるいは業界標準のヒューマンインターフェースデバイス(HID)の仕様に従うその他の任意のデバイスによっても制御することが可能である.

新しいデバイスをWolframシステムに接続する場合には,デバイスがコンセントにつながれていて,スイッチがあればそのスイッチがオンになっていなければならない.デバイスに特別のドライバが付いている場合にはそれがインストールされていなければならない.

業界標準のヒューマンインターフェースデバイスの仕様に従うデバイスなら何でも,すぐにWolframシステムで使用できる.

Wolframシステムが検知するデバイスはすべてControllerInformation[]の出力にリストされる.ここでは,USBで接続するLogitech Dual Actionのゲームパッドデバイスの他に,組込みのデバイスがいくつかリストされている:

In[1]:=
Click for copyable input
Out[1]=

一旦デバイスが検知されると,Wolframシステムでそれを使うことができる.

    

ゲームパッドやその他のコントローラはデフォルトで,ManipulateおよびGraphics3DのようなWolfram言語関数と一緒に使用することができる.例えば,他に設定を追加して行わなくても,接続されているゲームパッドを使って,Manipulateのコントロールを調整したり,3Dグラフィックスを回転させたりすることができる.この詳細については,「組込みのゲームパッドサポートを使う方法」を参照のこと.

低レベルでは,WolframシステムはControllerInformation[]の出力に表示されているどの情報でもControllerState[]と一緒に使うことができる.

ここでは,ゲームパッドのすべてのコントロールそれぞれについて,その状態が規則のリストとして返されている:

In[1]:=
Click for copyable input
Out[1]=

のようなこのリスト内のコントロールの名前は,デバイスが返す低レベル情報から直接取られている.

デバイスの製造業者が異なると,コントロールに使われる名前も異なるという場合が多い.Wolframシステムは,これらの名前を標準化し,1Dアナログコントロールには等を,そしてボタンには等を使おうと試みる.

Wolframシステムがその標準化された名前をどのようにハードウェア名にマップするかを見るには,ControllerStateのコントローラ名と一緒に使う.以下の例ではShortを使ってこのマッピングの数行だけが表示されている:

In[2]:=
Click for copyable input
Out[2]//Short=

以下では,標準化された名前をリストで使って,最初の3つの1Dアナログ軸の現在の状態を得る:

In[3]:=
Click for copyable input
Out[3]=

この入力をDynamicで囲むと,出力が継続的に更新されるので,リアルタイムで各軸の状態を見ることができる.

Manipulateのような関数でこれらの標準化された名前を使う方法については,「組込みのゲームパッドサポートを使う方法」を参照のこと.

    

ControllerStateが使用しようとしている新しいコントローラにすぐに反応しない場合には,ControllerPathオプションを調整する必要があるかもしれない.Wolframシステムがファイルを探す場合に$Path内のディレクトリを検索するのと同じような方法で,ControllerStateControllerPath設定に基づいて使用できるコントローラを探す.

ControllerPathのデフォルト設定では,ゲームパッドがあればそれが使われる:

In[1]:=
Click for copyable input
Out[1]=

このため,ControllerStateの第1引数としてのを省略しても,同じ結果が得られる:

In[2]:=
Click for copyable input
Out[2]=
In[3]:=
Click for copyable input
Out[3]=

接続されているゲームパッドがない場合には,ControllerStateはデフォルトで他のコントローラデバイスを,他のジョイスティックデバイス,3Dマウス,そして最後に赤外線コントローラやデジタイザを含めたその他のコントローラデバイスの順に選択して使用する.

ControllerPathに表示されるデバイスの順番を変えることによって,ControllerStateがそれらのデバイスを探す順番を変えることができる.

以下では,ポータブルのコンピュータに組み込まれている緊急モーションセンサが優先されることがControllerPathに指定されている.

In[4]:=
Click for copyable input
Out[4]=