AtsEXプラグインの実装例
AtsEXを使うとどんなことができるのでしょうか?
開発メンバーのアイデアや、実際に制作したプラグインの例を交えながら、AtsEXで具体的にどのようなことができるのかご紹介します。
公開中のプラグインの一覧もどうぞ
AtsEXプラグインを入手する
AtsEX上で動作するプラグインを「AtsEXプラグイン」と呼びます。
このページでは、おーとまが制作・公開しているAtsEXプラグインを一覧でご紹介しています。
車両プラグインの例
車体傾斜装置・振り子装置の再現
BVE内部では、カーブ・カントや勾配などの線形に合わせて常に自列車の車体の向きを計算しています。 AtsEXからその処理に介入し、車体へ追加で傾斜をかけることで、特急型車両に搭載されている車体傾斜装置や振り子装置を実装することが可能です。
以下の映像では、E353系の車体傾斜装置を物理演算によって精密に再現しています。
列車が急なカーブ(15:05、18:05など)に差し掛かると、装置の動作音が鳴り、少しずつ車体が傾いていくのがお判りいただけるかと思います。
車両データ制作:Mc_1323氏、タピオカ丸氏 / 路線データ制作:大糸線研究会 / 車体傾斜プラグインの開発にあたり、一部コードの提供および実装の支援をさせていただきました。
BVE本体標準の音声再生機能をプラグインから呼び出す
モーター音やエンジン音をこだわりたい場合や、ATSサウンドのインデックスが枯渇するほど多数の音声を再生したい場合は、BVEの標準機能では足りず、特殊なプラグインを開発することになります。 しかし、プラグインからはBVE本体標準の音声再生機能をATSサウンド経由以外で呼び出すことはできなかったため、従来はOpenALなどを使用して独自に音声再生機構を実装しなければなりませんでした。
このように独自に音声再生機構を実装する場合、実装には当然大変な手間がかかります。その上ポーズ中であるかどうかを判別できないため、ポーズ中に音を止めることができませんでした。
しかし、AtsEXを使えばBVE本体標準の音声再生機能を自由自在に利用可能。
独自に音声再生機構を実装する必要はもうありませんし、しっかりとポーズ中に音を止めることもできます。
ワンマンモニターの再現
従来は、モニターにそれらしい画像を表示させることで疑似再現するのが一般的でした。 AtsEXではBVE本体がマップの描画に使用しているストラクチャの3Dモデルを取得できるため、Direct3Dを駆使すれば実際の景色をモニターに表示することができます。
トンネル抵抗の再現
実際の鉄道車両は、トンネル内では抵抗を受けて加速しづらくなることが知られています(これを「トンネル抵抗」と言います)。しかし、従来のBVEではシナリオの途中で走行抵抗を変更することができませんでした。
AtsEXでは走行抵抗係数の変更に対応しているため、トンネル抵抗はもちろん、他にも向かい風やジェットコースターの減速レールなど、あらゆる走行抵抗の変動を再現することが可能です。
以下の映像では、トンネル内とそれ以外で走行抵抗係数を実車通りの数値に変動させています。 新幹線では一般的な在来線と比較して、その高速で走行する特性から運転操作にトンネル抵抗が大きく影響するそうです。
車両データ制作:タコスきょうだい氏、F81 tec200氏 / 路線データ制作:タコスきょうだい氏 / 走行抵抗係数変更プラグインを提供させていただきました。
マッププラグインの例
車止めで強制停止
従来のATSプラグインでも速度を取得することはできましたが、設定することはできませんでした。
AtsEXでは速度の設定にも対応しているため、特定の距離程を通過した時に速度をゼロにすることで実装可能です。
手動での駅ワープを必要としないスイッチバックの表現
スイッチバックを含むシナリオでは、到着時用の駅、方向転換後発車時用の駅を別々に用意し、当該駅到着後に時刻表から発車時用の駅にワープすることで疑似的に再現するのが一般的です。
AtsEXでは現在位置、現在時刻の設定に対応しているため、当該駅到着を検知後に発車時用の駅が存在する距離程にワープさせ、方向転換に要した時間を現在時刻に足すことで、
スイッチバックの表現を自動化することができます。
沿線道路を走る自動車の動きを多彩に
近年沿線の道路を自動車が走っているシナリオが増えてきていますが、そのような演出のためには走行用の他軌道を用意する必要があります。
地方にあるような片側1車線の1本道ならそこまで大変ではありませんが、1つでも交差点であったり停留所で幅寄せするバスを作ろうと思うと、その瞬間必要な他軌道の数が指数関数的に増えていってしまいます。
この大量の他軌道をひとつひとつ位置を計算して敷設するのは非常に大変です。
AtsEXでは他列車を軌道の位置に関わらず動かすことができるため、従来よりも圧倒的に短時間で、多彩な動きをする自動車を実装することができます。
下の映像は、ユーザーのキー入力で他列車のバスを操作できるようにした例です。
AtsEX本体に同梱のサンプルシナリオ「他列車操作サンプル EX」より、ご自身のお手元で体験いただけます!
踏切の遮断桿動作の再現
前項「沿線道路を走る自動車の動きを多彩に」から派生した例です。従来は信号を使ったアニメーションで表現する方法が一般的でしたが、テクスチャの準備や先行列車の位置の微調整に大変な労力を要しました。
AtsEXの「他列車を軌道の位置に関わらず動かす」機能を使えば、下の映像のように滑らかに動く遮断桿を簡単に実装できます。
逝っとけダイヤの再現
従来のBVEでは、表示される時刻表でバレてしまうため、種別・行先変更を伴う大規模なダイヤ乱れを再現することは困難でした。
AtsEXでは駅リストの編集に加え時刻表やダイヤグラムの再描画にも対応しているため、輸送指令からの指示に合わせて、運行中に後から運行予定を変更することができます。
踏切障検動作等による強制的な停止現示信号の再現
従来のBVEでは、信号の現示は先行列車と自列車の位置関係、駅に紐づけられた出発信号などの絶対信号の現示によって自動的に決定されていたため、信号の現示を操作することは困難でした。
AtsEXの「特定の信号の現示を上書きする」機能を使えば、見出しにある「障検動作」や、昭和初期のATSなどに見られる特殊な信号現示の推移を再現することができます。
下の映像では、前から2つ目の信号の現示をAtsEXプラグインから介入しています。
拡張機能の例
拡張機能は車両プラグインやマッププラグインと異なり、車両や路線に関わらず常に読み込まれます。この特徴を活用した例のご紹介です。
軽量化プラグインやグラフィック系プラグインなど、描画全般に関わるプラグイン類
AtsEXならBVEが使用しているDirect3Dデバイスを取得できるので、DirectXに関する知識があればBVEの描画に介入するプラグインも開発可能です。
描画系プラグインが依存するのは、車両や路線ではなく「BVE本体」です。
車両に依存する機能は車両プラグイン、路線に依存する機能はマッププラグイン、そしてBVE本体に依存する機能は拡張機能……という訳です。
外部機器との連携
外部のコントローラや鉄道部品、LEDなどの機器と連携させようとすると、例えば圧力や電流の情報を外部機器に伝達したい場合など、
入力デバイスプラグインでは機能が足らず、ATSプラグインとして実装しなければならないケースがありました。
しかし、ATSプラグインとして実装した場合、その機能を使用したい車両すべてにプラグインを組み込まなければならず、非常に大変な手間がかかってしまいます。
拡張機能はATSプラグインと異なり常に読み込まれるため、このような車両や路線に関わらず実行したい処理を実装するのに最適です。
他のAtsEXプラグインから参照するライブラリの開発
車両プラグインやマッププラグインの開発にあたって何度も使いそうな機能を、ライブラリとしてひとまとめにしておきたい……
そんな時にも、常に読み込まれる「拡張機能」として実装するのがおすすめです。
なおAtsEX コア拡張機能 (AtsEx.CoreExtensions.dll) はこの一種で、
- 右クリックメニューに独自の要素を追加する機能
- 先行列車や他列車の動きに介入する機能
- 信号現示に介入する機能
- 自列車や他列車を自由自在に動かす機能
実際のコードを見てみましょう
AtsEX マッププラグインのサンプル
AtsEX SDK同梱のマッププラグイン「他列車操作サンプル」より抜粋(一部改変しています)
AtsEX 車両プラグインのサンプル
AtsEX SDK同梱の車両プラグイン「状態取得・設定サンプル」より抜粋(一部改変しています)