How to | ゲームパッド等のデバイスを Mathematica に接続する方法
Mathematica は,キーボードやマウスによってだけではなく,ジョイスティック,ゲームパッド,3Dマウス,あるいは業界標準のヒューマンインターフェースデバイス(HID)の仕様に従うその他の任意のデバイスによっても制御することが可能である.
新しいデバイスを Mathematica に接続する場合には,デバイスがコンセントにつながれていて,スイッチがあればそのスイッチがオンになっていなければならない.デバイスに特別のドライバが付いている場合にはそれがインストールされていなければならない.
業界標準のヒューマンインターフェースデバイスの仕様に従うデバイスなら何でも,すぐに Mathematica で使用できる.
Mathematica が検知するデバイスはすべてControllerInformation[]の出力にリストされる.ここでは,USBで接続するLogitech Dual Actionのゲームパッドデバイスの他に,組込みのデバイスがいくつかリストされている:
| In[3]:= |
| Out[3]= | ![]() |
一旦デバイスが検知されると,Mathematica でそれを使うことができる.
ゲームパッドやその他のコントローラはデフォルトで,ManipulateおよびGraphics3Dのような Mathematica 関数と一緒に使用することができる.例えば,他に設定を追加して行わなくても,接続されているゲームパッドを使って,Manipulateのコントロールを調整したり,3Dグラフィックスを回転させたりすることができる.この詳細については,「組込みのゲームパッドサポートを使う方法」を参照のこと.
低レベルでは,Mathematica はControllerInformation[]の出力に表示されているどの情報でもControllerState[]と一緒に使うことができる.
ここでは,ゲームパッドのすべてのコントロールそれぞれについて,その状態が規則のリストとして返されている:
| In[6]:= |
| Out[6]= | ![]() |
のようなこのリスト内のコントロールの名前は,デバイスが返す低レベル情報から直接取られている.
デバイスの製造業者が異なると,コントロールに使われる名前も異なるという場合が多い.Mathematica は,これらの名前を標準化し,1Dアナログコントロールには
,
,
,
等を,そしてボタンには
,
等を使おうと試みる.
Mathematica がその標準化された名前をどのようにハードウェア名にマップするかを見るには,
をControllerStateのコントローラ名と一緒に使う.以下の例ではShortを使ってこのマッピングの数行だけが表示されている:
| In[19]:= |
Out[19]//Short= | |
![]() | |
以下では,標準化された名前
,
,
をリストで使って,最初の3つの1Dアナログ軸の現在の状態を得る:
| In[7]:= |
| Out[7]= |
この入力をDynamicで囲むと,出力が継続的に更新されるので,リアルタイムで各軸の状態を見ることができる.
Manipulateのような関数でこれらの標準化された名前を使う方法については,「組込みのゲームパッドサポートを使う方法」を参照のこと.
ControllerStateが使用しようとしている新しいコントローラにすぐに反応しない場合には,ControllerPathオプションを調整する必要があるかもしれない.Mathematica がファイルを探す場合に$Path内のディレクトリを検索するのと同じような方法で,ControllerStateはControllerPath設定に基づいて使用できるコントローラを探す.
ControllerPathのデフォルト設定では,ゲームパッドがあればそれが使われる:
| In[9]:= |
| Out[9]= |
このため,ControllerStateの第1引数としての
を省略しても,同じ結果が得られる:
| In[18]:= |
| Out[18]= |
| In[19]:= |
| Out[19]= |
接続されているゲームパッドがない場合には,ControllerStateはデフォルトで他のコントローラデバイスを,他のジョイスティックデバイス,3Dマウス,そして最後に赤外線コントローラやデジタイザを含めたその他のコントローラデバイスの順に選択して使用する.
ControllerPathに表示されるデバイスの順番を変えることによって,ControllerStateがそれらのデバイスを探す順番を変えることができる.
以下では,ポータブルのコンピュータに組み込まれている緊急モーションセンサが優先されることがControllerPathに指定されている.
| In[22]:= |
| Out[22]= |



