艦船の速度について

Unityでは、Rigidbody.velocity.magnitudeから物体の速度を取得します。
しかしこのmagnitudeの単位は何なのか……
km/h? それともmph……と思ったら、そもそもUnityの距離の単位はunit(別にシャレではなく普通にユニットなんだろう)らしい。
で、1ユニットは1m四方として設計されている。
そしてここによれば、magnitudeはunit/s=m/sの数値とのこと。

これを鋼鉄らしくノットに変換するとなると、
1m/s=1.94384ノットらしいので、少数第二位までを有効数字として、velocity.magnitude * 1.94が欲しい数値となる。
これを参考にプロパティとして記述すると、

float currentSpeed{
get{
return GetComponent().velocity.magnitude;
}
set{
GetComponent().velocity.magnitude * 1.94 = value;
}
}



これをGUIに持っていけばノットで速度が表示されるはず。
しかしこれはリアルタイムで動いている物体の速度を検出するやり方、つまり戦術画面の話です。
設計時に最大速度を表示するにはvelocity.magnitudeでは不適切なんですよね。

まあ、そもそも順番が逆なのでちゃんと考えてみましょう。
鋼鉄だと、まず設計時に最大速度が決定されるので、これをfloat値として保持します。
名前はmaxSpeed。currentSpeedとは関係ない数値を準備することで問題は解決しました。
意味が分からない、という方は、筆者が頭悪い書き方をしているだけなので気にしないでください……
速度の単位は航空機だとkm/hになるんですが、ノットでよくない?まあ現実感覚的には分かりやすいんですが、艦船との相対速度のほうがゲーム的には重要な気がするし。

速度の取得については問題なさそうです。
次に、戦術画面での艦船の動かし方を考えてみましょう。鋼鉄では、
機関後進=1/2 * -maxSpeed
機関停止=0
微速=1/10 * maxSpeed
巡航速度=1/2 * maxSpeed
全速=maxSpeed
という風に速度が切り替わります。PC版では一応10段階かそれ以上に速度を調節できたのですが、普通は使わないせいか、PS2版だとその機能は削除されました。
筆者もぶっちゃけあの機能はいらないと思うのでPS2版準拠にしたいと思います。

しかし、長くなりそうなので今回はこのあたりで終わりにします。
スポンサーサイト

コメント

非公開コメント