OpenBVE 日本語リファレンス

ワンポイント集

ここでは、「あれをするにはどうすればよいか」「これをするにはどうすればよいか」といった細かな疑問に応える形で、ワンポイントを掲載しています。
路線製作の参考になれば幸いです。

OpenBVEで車輪を回転させるにはどうすれば良いですか?

車輪を回転させるには、車輪とレールが触れ合っている位置を求める方法が手っ取り早いです。
つまり、走行することによってレールと車輪の接触位置は変化しますので、その変化した距離=回転した距離というふうに求めることができます。
従って、前回のフレームからどれだけの距離を車輪が動いたかを求めることで、その値を元に回転角を出せます。

記述例:

;Mc207.animatedの中身
[object]
states=wheel.csv
RotateXFunction = value + mod[(speedometer * delta),2.7] / 2.7 * 3.14 * 2
value は、RotateXFunctionが前回の演算で返した値を記憶しています。つまり、一番最初はゼロを返します。
speedometer * deltaは、速度*前回の演算からの時間、つまり速さx時間で距離を求めています。
本来はmodで余りを求める必要性はありませんが、(演算結果の距離は普通は2.7を下回るはず)念のため割り算しています。
その結果を2.7で割ります。2.7とは、車輪径x3.14の結果です。つまり円周ですね。この結果、 走った距離が車輪周の何割にあたるかを返します(割、と言いましたが最大値は1です)。
これに、3.14 * 2(2π)をかけます。RotateXFunctionはラジアン単位で回転角を指定するため、2πラジアン(6.28)で1回転となります。

つまり、1フレームごとに1回転分に対する回転割合を求め、それを前回の値に足すことで回転角の絶対的な値を出しているということです。
よく分からない場合には、式中の「2.7」を車輪の直径 x 円周率(3.14) に置き換えるだけで動作します。

サンプル

動画を見る ここでは、シリンダーオブジェクトを車輪の向きに回転させたCSVオブジェクトを用意し、 animated側で車両前方へ移動、それを回転させた動画を掲載しています。
画像クリックで動画を見れます。
このサイトについて サポート サイトマップ