2019年10月8日火曜日

メモ:DCS F-16



 MFDのカーソル移動はRDR CURSOR Switchで、ロックオン等の操作はTarget Management Switchで行うらしい。前者はスロットル、後者はスティックについている。
 ミサイルの発射はWPN REL Buttonで行う。


 物の本によると、スティックはボタンが5個、十字キーが4個、あるらしい。スロットルは、ボタンや十字キー、ダイヤルがいくつか。前述の通り、戦闘にはスティックとスロットルの両方の入力インターフェースが必要になる。
 それっぽい操作系を作るのは大変そうだ。


 右側のデータ入力パネルはいろいろな表示ができるが、ウェイポイントの編集はICPの4/STPT、低高度警告は2/ALOWで行える。
 低高度警告は、設定高度を下回ると警告音声が出る。例えば対空戦闘の演習を行う際に、下限高度を10000ftに設定しておけば、その高度を下回った場合は音声によって警告が行われるので、墜落の危険性を軽減できる。もっとも、2万ftから最スローで垂直降下した場合、1万ftから5-7gで引き起こしても7000ftくらいは使うので、1万ftでも余裕綽々という程ではない。初期値は5000ftだから、かなり危ない。
 ウェイポイントは、Mission Editorで設定したウェイポイントがプリセットされている。これはSTPTから編集ができる。ただし、あとから追加したウェイポイントをHUDで表示する機能は見つけられていない。MFDのマップにも表示されないので、何らかの追加操作が必要になりそう。
 低高度警告は追加したウェイポイントでも警告が出る。

 ミサイルステップボタン(Sキー)を押せば、使用するミサイル(ハードポイント)を選択できる。ミサイルの種類(AIM-120やAIM-9X等)は、MFDのSMSからは変更できるが、HOTASではどうやるんだろう?
 また、Sキーは地上では前輪操舵ON/OFFの切り替えにも使われるが、DCSではON/OFFのトグルとして実装されている。実機は1回押すとON、2度押しするとOFF、という感じなので、ちょっと違う。操舵ON/OFFはHUD右にインジケーターがあるので現在のモードを把握するのに不自由はないが。


 オートパイロットのスイッチは、計器盤左側にまとめてついている。といっても、大した機能はないが。そもそも、電子制御の飛行機は、常にATTI HOLDで飛行しているわけだから、オートパイロット関係は補助的な機能として、HOTASでは操作できないような、不便な位置に配置されている。もっとも、HOTASは戦闘関係の素早い操作が必要なスイッチを主に配置しているから、オートパイロットのような、時間的に余裕のある機能はHOTAS化する必要はない、ということなのかもしれないが。


 ミサイルフルロードで飛んで、片側だけ消費すると、かなりのロールがかかる。特に低速域では強烈に持っていかれるので、着陸もままならない。トリムで調整しても、低速域では空力が悪いせいか、着陸時は気休めくらいにしかならない。
 電子制御だとスティック入力がない場合はロール・ピッチレートを維持する、という制御だと思っていたけど、そうじゃないらしい(だからオートパイロットが付いてるのか)。
 F-2は、脚格納時はα/βを制御、脚展開時は重力加速度方向を制御、という感じになっているらしい。そういう制御だと、重量バランスが悪かったりしても、特にトリム等を修正しなくても、素直に飛んでくれるはず。
 F-2とF-16の飛行制御ソフトは別物とか、そもそもDCSがF-16の飛行制御をどこまで再現しているのかとか、怪しいところは尽きないけど。
 しかしまぁ、スティックの一番操作しやすいところにトリム入力が付いてるってことは、頻繁に使うんだろうし、左コンソールにもトリム入力が付いてるってことは、バックアップも必要、ってことなんだろうな。とすると、F-16はちゃんとトリムを調整しないと飛べない機体なのかも。







 気まぐれに、Luaスクリプトを眺めてる。
 DCSはC:\Program Files (x86)\Steam\steamapps\common\DCSWorldにあるが、ゲーム全体で使うLuaや、DLCに同梱されたLua等、いろいろある。
 例えば、ゲーム固有のスティック入力は、C:\Program Files (x86)\Steam\steamapps\common\DCSWorld\Config\Input\Aircrafts\common_joystick_binding.luaで定義されている。
 DLC固有のスティック入力は、C:\Program Files (x86)\Steam\steamapps\common\DCSWorld\Mods\aircraft\F-16C\Input\F-16C\joystick\default.lua等で定義されている(当然、DLCコンテンツによって変わる)。

 default.luaからはcommon_joystick_binding.luaのプロファイルを読んだ上で、そこにDLC固有のコンフィグを加える、という動作になっている。
 また、default.luaではいくつかのファイルをインクルード(dofile)していて、それぞれデバイス(アビオ)の定義や、それらで使うキー入力を定義している。定義の実態は変数をインクリメントして割り当てているだけなので、列挙型のような挙動になっている。
 実際にDLCで使うキー等はdefault.luaで定義している。

 キー定義は、downとupを個別に定義するようになっている。
 downはキーが押されたときに値が送信される相手を指定し、upはキーが離されたときに値が送信される相手を指定する。value_downはキーを押したときに送信する値を指定し、value_upはキーを離したときに送信する値を指定する。というような、挙動な気がする。
 例えば、ICPの0ボタンの定義を見てみると、downとupはufc_commands.DIG0_M_SEL、value_downは1.0、value_upは0.0、という感じになっている。キーを押したときはufc_commands.DIG0_M_SELが1になり、キーを離したときはufc_commands.DIG0_M_SELが0になる、という動作。
 特殊なコンフィグ、例えば、キーaを押したらボタン0のpressが送信され、キーaを離したらボタン1のpressが送信され、キーbを押したらボタン1のreleaseが送信され、キーbを離したらボタン0のreleaseが送信される、というような定義を追加し、キーを割り当てた場合、実際に想像通りの動作が行われる。
 ここで注意する必要があるのが、スイッチによってレンジが異なる点。例えば押しボタンスイッチは1.0でpress、0.0でreleaseだが、トグルスイッチでは、1.0がON側、-1.0がOFF側、といった場合がある。「0.0を送ってもOFFにならねーぞ!」と思っていたら、-1.0を送らないとOFFにならない、といった具合。
 設計思想として、ユーザー操作が行われていないときは0、操作が行われているときは0以外、ということなのだろう。押しボタンのようなモーメンタリスイッチであれば、押しているときは1、押されていないときは0で、この前提が当てはまる。しかし、トグルスイッチをモーメンタリスイッチで操作する場合などは、常に0以外が送信されてしまうので、もしかしたらDCSの内部処理的に問題が出るかもしれない。
 前回のスピードブレーキは、展開はdownとupが定義されていて離したところで停止、格納はdownのみが定義されていて離しても動作が続く、といった実装になっている。実際にソースコード(というかスクリプトだけど)を読んでみると、ゲーム内の挙動がよく理解できて良い。

 DLCのアップデート等でdefault.luaが書き換えられる可能性はあるが、とりあえずオルタネートスイッチとかの挙動が理解できたので、いろいろできる可能性が出てきた。
 以前は、オルタネートスイッチ1個にゲームパッドキー2個を割り当てて、オルタネートONでキー1を送信、オルタネートOFFでキー2を送信、みたいな実装にしようと思っていたが、DCS側でオルタネートスイッチからの入力を扱えるなら、使用効率が2倍近くに向上できる。

 DCS内で3ポジションスイッチとして実装されているスイッチも、スイッチによってvalueの処理が異なる。ブレーキの場合、closeは1.0、openは-1.0、stopは0.0、といった感じ。一方で、ピッチAPは、高度維持はAltが1.0、姿勢維持はAttが1.0、ピッチAP OFFはAltが-1.0、といった感じで、異なる相手に対して値を送信する必要がある。
 ゲームコントローラ的には押しボタンのON/OFFしか扱えないから、3ポジションスイッチとかの場合はうまい組み合わせを考える必要がある。確認していないけど、ロータリースイッチ相手とかだとさらに面倒なことになりそう。

 DCSの内部処理的には、名前でなく、down/up/value_down/value_up等のハッシュ値でコンフィグを認識しているらしい。エクスポートしたキー割り当てが不思議なことになっているのはこのためと思われる。

***

 ちょっとしたメモを書こうと思っただけなのに、いつの間にか結構な量になってしまった。おかしいなぁ……

 USB HIDのゲームコントローラーも作れるようになったし、DCSの挙動もわかってきたし、どんどん外堀が埋められてる感があるぞ……
 NKKスイッチズのカタログでトグルスイッチを探してモノタロウで値段調べ始めたらいよいよ末期。。。
 3ポジションスライドスイッチで片方だけリターンスプリング入り、みたいなスライドスイッチは、さすがに無いだろうなぁ。3Dプリンタで作るという選択肢も…? そこまで細かい部品作れるかなぁ。

 // 「まずヒコーキ飛ばす練習をしろ」というツッコミが聞こえてくるゾ

0 件のコメント:

コメントを投稿