モード選択 | virt_flyのブログ

virt_flyのブログ

フライトシミュレーターソフトのFlightGearで仮想飛行を楽しむブログです。

イメージ 1

↑画面中央で上下別画像をひっつけています。雲にも誤差なく、瞬時に武器の切り替えができています。
 

クリック一つで瞬時に装備変更ができるのだが

 

いろいろな機体を飛ばしてみるものですね。先頃Ju 87を飛ばしてみていて、役立ちそうなものを見つけました。

メニューバーからクリックひとつで、翼の機銃に替えて翼下にガンポッドを出現させたりその逆を実現する機能です。しかも、翼の機銃と翼下のガンポッドでは銃口の位置が大きく異なるにもかかわらず、該当する銃口が火を吹く様子を簡単な条件指定だけで再現しているのですから。

この機能、便宜的に「モード選択」の機能とよぶことにします。似たような機能は、他の機体にもあるのでしょうがが、そのシンプルさから、いろいろな応用ができそうです。

装備の脱着、機種のバリエーションへの対応など、どの程度まで使えるものか、久しぶりに我がJu EF.128改を用いて試してみました。

目標は、爆弾とミサイルとクリックひとつで取り替えができるようにすること。

メニューバーからのモード選択

メニューバーから、爆弾やミサイルを指定してやるためには、Dialogsフォルダにあるjuef128-menu.xmlに以下の記述を挿入してやります(赤字部分)。
 

<?xml version="1.0">

<PropertyList>

  <default>
  <menu n="10">
   <label>Ju EF128</label>
   <enabled type="bool">true</enabled>
   <item>
    <label>Select Livery</label>
        ・
        ・
        ・
        (略)
        ・
        ・
        ・
   <item>
    <label>Weapons mode 1</label>
    <binding>
     <command>property-assign</command>
     <property>/sim/model/weapons</property>
     <value>1</value>
    </binding>
    <binding>
     <command>property-assign</command>
     <property>sim/multiplay/generic/float[11]</property>
     <value>1</value>
    </binding>
   </item>
   <item>
    <label>Weapons mode 2</label>
    <binding>
    <command>property-assign</command>
    <property>/sim/model/weapons</property>
    <value>2</value>
    </binding>
    <binding>
    <command>property-assign</command>
    <property>sim/multiplay/generic/float[11]</property>
    <value>2</value>
    </binding>
    </item>

        ・
        ・
        ・
        (略)
        ・
        ・
        ・
  </menu>
  </default>

</PropertyList>

Ju 87のGuns modeにならい、ここでは銃ではなく爆弾やミサイルという武器なのでWeapons modeとしました。このプログラムでやっていることは、/sim/model/weaponsというプロパティーに、武器のモードに合わせた数値を与えているとみなされます。

なお、juef128-menu.xmlをメニューバー設定ファイルとして使用するためには、あらかじめ機体設定ファイルであるjuef128_custom-set.xml中の<sim>タグ内に<menubar include="Dialogs/juef128-menu.xml"/>が記述されている必要があります。

使い方の実際は、メニューバーの右端の機体名Ju EF128のタブをクリックして表示されるドロップダウンメニューからモードを選び、装備を変更することになります。瞬時に変更されてなかなかいいのですが、そのためには、まだ次に記すことが必要です。

装備の脱着

ミサイルや爆弾の装備については、対応する3Dモデルのacファイルが用意されていることが前提です。
Ju 87では、機体本体のacファイルのなかに、当該3Dモデルが含まれており、機体の3Dモデル設定ファイル/Models/ju87.xml中の、<animation>で選択したモードに合わせ表示をselectすることで、目的の銃を描画させています。

我がJu EF128では、爆弾やミサイルの3Dモデルのacファイルは、機体のacファイルから独立していますから、装着すべきステーション位置に描画されるよう、機体の3Dモデル設定ファイル/Models/juef128_custom.xml中で爆弾やミサイルのacファイルに対応する3Dモデルxmlファイル(すでに存在)をフルパス指定しておき、爆弾やミサイルのxmlファイルの側で描画するかどうかの条件指定を記述してやります。

●機体の3Dモデル設定ファイル(/Models/juef128_custom.xml)中の記述の例
同じハードポイントに爆弾もしくはミサイルを装着する記述になっています。

        ・
        ・
        ・
        (略)
        ・
        ・
        ・
  <model><!-- Bomb, station 5 -->
   <path>Aircraft/juef128/Models/Stores/Bombs/bomb-sta5.xml</path>
   <offsets>
     <x-m>-0.93</x-m>
     <y-m> 1.16</y-m>
     <z-m>0.06</z-m>
     <!--<pitch-deg>-2</pitch-deg>-->
     <pitch-deg>0</pitch-deg>
   </offsets>
 </model>

 <model><!-- Missile, station 5 -->
   <path>Aircraft/juef128/Models/Stores/Missiles/missile-sta5.xml</path>
   <offsets>
     <x-m>-0.93</x-m>
     <y-m> 1.16</y-m>
     <z-m>0.06</z-m>
     <!--<pitch-deg>-2</pitch-deg>-->
     <pitch-deg>0</pitch-deg>
   </offsets>
 </model>
        ・
        ・
        ・
        (略)
        ・
        ・
        ・

●ミサイルの3Dモデルxmlファイル(/Models/Stores/Missiles/missile-sta5.xml)での例
ここではモード2が選択されているときにミサイルが描画される記述になっています。

<?xml version="1.0"?>

<PropertyList>

 <path>missile2.ac</path>

 <animation>
  <enable-hot type="bool">false</enable-hot>
 </animation>


 <animation>
  <type>select</type>
        <object-name>body-rear</object-name>
        <object-name>body-front</object-name>
        <object-name>fins</object-name>
        <object-name>fins.001</object-name>
        <object-name>fins.002</object-name>
        <object-name>Cone</object-name>
  <condition>
    <!-- start for Weapons mode -->
    <and>
       <not>
        <property>fdm/jsbsim/systems/armament/station5/released</property>
       </not>
       <equals>
        <property>sim/model/weapons</property>
        <value>2</value>
       </equals>

    </and>
    <!-- end for Weapons mode -->
  </condition>
 </animation>

 <!-- *** LoD *** -->
 <animation>
  <type>range</type>
  <min-m>0</min-m>
  <max-m>2000</max-m>
 </animation>

</PropertyList>

 以上で、メニューバーからの装備の脱着はOKです。

武器の使用時が問題

 装備の脱着が可能となったので、次はいよいよその使用です。モード1を選択した時は爆弾が落下していき、モード2でミサイルが煙を吐いて飛んでいくようにしたく、あわせて爆弾やミサイルが目標や地表に衝突すると爆発する様を再現する必要があります。

 Ju EF128では、使用する武器のハードポイントを模擬的にタッチパネルで指定するようにしたりしていて少々複雑なので、くわしいことは省略し、結論から言えば、トリガーが働いた後の爆弾、ミサイルの落下や飛翔の様子を記述したsubmodelsのxmlファイル(正確にはここではsubmodels2.xml)や、煙を吐くミサイルなどの3Dモデルxmlファイル、爆発を再現する3Dモデルxmlファイルに、先の<property>sim/model/weapons</property>で条件指定を書き込んでみたものの機能しませんでした。いろいろ試してみましたが、まったく消えてしまうか消えずに両方が再現されてしまいます。移動物体では無理なのか?

 今一度Ju 87を動かしてよく確かめると、モード1でも2でも機銃弾の軌跡が4筋も見えており、2筋でないことからみればやはりこちらでも機能していないことがわかります。何が問題なんでしょうか? バージョンの関係とかでしょうか? 今のところお手上げ状態です。いい線いってるのに、残念ですね。