べるもダイアリー

Cave Putorium

ジョイスティックを何個も使う飛行機オタク向けのゲーム設定アプリを作った話 #3

設の計: UI

Alternative Launcher は三つのウィンドウから構成される

  • Main window
  • Axis Assign Window
  • Key Mapping window

また、MainWindowは3つのタブから構成される

  • Launcher
  • Axis Assign
  • Key Mapping

Main Window - Launcher

ユーザーはまずAL起動時にMain WindowのLauncherタブを見ることになる。 ここにはBMS本体およびBMSに付属するエディター類の起動パネルが並ぶ、ここからBMS本体の起動パネルを押すと、いい感じにALがBMSの設定ファイルを生成してからBMS本体を立ち上げる。

BMSにはもう一つ課題があり、ゲームインストール時についてくる他のエディターなどを使いこなさないとゲームの機能をフルに楽しめないだけでなく、公式の外部アプリケーションもダウンロードしないとミッショエディタや天候設定などの様々な機能がフルに使えないのである……!初心者やDCSからのお試し組はフォーラムやマニュアルを丹念に読むとは限らないので、ずーっとこうした本体以外のアプリケーションの存在に気が付かないまま「BMSはこんなものか」で評価を終えてしまう可能性がある。これはまずい!

ということでALのこの画面には外部公式アプリおよびフォーラムで必須とされるような3rd製アプリケーションの起動パネルも並べることにした。インストールされていない場合はダウンロードページに飛び、されている場合はそれを起動する。という程度のシンプルなものだが、初心者に「BMSはこういう遊び方が出来ますよ」と紹介するのに良い方法だと考えた。

(あとそれ以外にもゲーム起動時のコマンドラインオプションで有効化される設定があったりするので、そういうのもAL側で有効に出来るようにしといた)

Main Window - Axis Assign

ALでは

  • 「ゲーム内軸」
  • 「物理軸」

と軸の概念を二つに分けて考えた。

  • 「ゲーム内軸」はゲーム内の戦闘機のコクピット内の軸出力であり
  • 「物理軸」はジョイスティックの物理的な軸入力のことである

例えばゲームの中の戦闘機の操縦桿を手前に引く行為はゲーム内軸出力であり、この出力に現実世界のジョイスティックを手前に引く方向の入力を割り当てると、ジョイスティックを手前に引いた時ゲームの中でも操縦桿を手前に引いたことになり、戦闘機の機首は上に向く。(これをピッチアップと呼ぶ)

Axis AssignタブではBMSで割り当て可能なゲーム内軸設定のリストが並び、また物理軸がそのゲーム内軸に割り当てられている場合は、その入力値が表示されるようになっている。適当にジョイスティックを動かすとスライダーが動き、ユーザーはジョイスティックのどの操作がゲーム内のどの操作に対応しているか一目で理解できる。

それぞれのゲーム内軸の項目欄の隣にはASSIGNボタンが存在し、ここを押すとAxis Assign Windowという小窓が表示される。

ところで、BMS本体のUIで問題となっていたPRIMARY DEVICEの設定について、ALではROLL軸を割り当てたジョイスティックを自動的にPRIMARYとして設定されるようにした。

Main Window - Key Mapping

ここではBMSのキーボードおよびジョイスティックのDX/POVボタンの割り当てが表として表示される。 割り当て項目のリストおよびキーボードの割り当てリストはBMS側のKeyFileから読み込まれ、ジョイスティックの割り当て内容はAL側で管理しているジョイスティック設定ファイル(XML形式)から反映される。

例えばこんな感じに:

callback keyboard joystick-1 joystick-2
SimTrimUp POV1 UP
SimTMSUp Shift+Home DX7
SimTMSDown Shift+End DX9
SimCursorEnable Shift+Enter DX1
SimIdleDetent DX32 Release
SimCutoffDetent DX32

(数字が0から始まるのは非プログラマには直感的でない気がしたので、内部的にはDX0であっても+1表記している。ジョイスティック側のドライバも一般的にはそうなっている場合が多い)

行をダブルクリックすると、その割り当て項目をどのジョイスティックのどのボタンにどう割り当てるかを質問してくる Key Mapping Window という小窓が立ち上がる

DCS Worldのキー割り当て画面を参考にしたが、DCSではどのジョイスティックに割り当てるかダブルクリックする列も選ぶことによってユーザーが指定しないといけないのに対して、BMS ALでは対応する割り当て項目の行をクリックすればどのジョイスティックの入力も識別してくれるようにした。個人的にはDCSの割り当て仕様にも使いづらさを感じていたからだ。

Axis Assign Window

Main Window - Axis Assign から特定の項目のAssignボタンを押すと、この小窓が出現する。この画面では、親ウィンドウで選んだ項目であるゲーム内軸に対して。どの物理軸を割り当てるかユーザーが決定できる。

もしまだどの物理軸も設定されていない場合は、AWAITING INPUTSという表示が点滅する。ユーザーが手元のジョイスティックの物理軸を動かすと、画面は反応してその物理軸をゲーム内軸へと割り当てる。

BMS本体のUIでは物理軸はドロップダウンリストで選択する方式だったが、ユーザーはジョイスティックの物理軸の名前が現実のその動きに対応しているのか知らないので、これは直感的ではない。それよりも手元のジョイスティックを直接動かしたときに画面が入力を検知してくれれば、それが一番直感的だ。だからそうした。DCSやIL-2など他のフライトシミュレータでは一般的な方法でもある。

Key Mapping Window

Main Window - Key Mapping タブからリストされたゲーム内操作項目の中から、任意の項目の行をダブルクリックするとこの小窓が開く、ユーザーは親ウィンドウで選択した操作項目に対するジョイスティックボタンの割り当てを行うことになる。

BMS本体のUIではボタンを押したときに反応するよう設定することはできるが、キーファイルではボタンを離したときに特定の操作が反応されるように設定することもできる。そのためALではボタンを離したときの操作もこの小窓から設定できるようにした

また、BMSではピンキーという操作を押し続けている間、DX番号が繰り上がり、ボタン同時押しにより違う操作項目が実行できる機能があるのだが、本体側のUIにこれを設定する機能がない。しょうがないからALには同時押し割り当て機能もつけた

じゃあ、こういうUIをどんな感じで実装したの?つづく!