ビートセイバーの譜面データには、各ノーツが曲開始から何拍目(beat)で切るべきか、という時間情報が入っています。この拍(beat)を曲のbpmで割ると、分に換算されます。さらに60を掛けると秒になります。
例えば公式曲 Jaroslav Beck - Beat Saber のノーツ配置データ(Easy.dat)はこんな感じ。_timeの横の数字が、その時間情報になります。
"_notes":[
{"_time":8.0,"_lineIndex":2,"_lineLayer":0,"_type":1,"_cutDirection":1},
{"_time":14.0,"_lineIndex":3,"_lineLayer":0,"_type":1,"_cutDirection":3},
{"_time":16.0,"_lineIndex":1,"_lineLayer":0,"_type":0,"_cutDirection":1},
{"_time":24.0,"_lineIndex":2,"_lineLayer":0,"_type":1,"_cutDirection":3},
...(以下略)
Mediocre Map Assistant 2でこの譜面を開くと、ちょうど8のところに最初のノーツが、14のところに次のノーツがあるのがわかりますね。
譜面情報(Info.dat)は
"_beatsPerMinute":166.0,
のように166bpmとなっているので、ノーツを切るべき時間は順に
2.89秒
5.06秒
5.78秒
8.67秒
...
となります。(例外として、途中でbpm変更イベントが入る譜面もあります)
それでは、この「切るべき時間」のとき、ノーツはどこにあると思います?プレーヤーの体の真横でしょうか?それとも、セイバーの刃部分の長さは1mあるので、プレーヤーから1m離れたところでしょうか?
正解は、プレーヤーの頭(HMD)から0.9m手前(1.24.0現在のバージョンでは0.65m)です。これはビートセイバー内部のノーツを発生させている処理を追っていくとわかる数字なのですが、これだけで終わるのも何なので、実際に見てみましょうか。
追記:
下記の動画の通り、昔のバージョンでは0.9mだったのですが、最近のバージョンでは0.65mになっています。(1.22.0/1.24.0で確認)
動画では、検証のためmodで頭位置を原点(z=0)に強制固定して、曲の再生速度は1/10にしています。ノーツの上に出ている座標のZ軸が奥行き方向。このように、ノーツは2.89秒の時点で0.9mの地点を通っているのがわかると思います。
この位置よりも奥や手前で切る場合は、(理論的には)音とのズレが生じていることになりますが、みなさんが普段ノーツを切っている位置はどのあたりだと思います?これも感覚で知ることは難しいので、切ったタイミングが早いか遅いか表示するmodをそのうち作ろうと思ってます。
振りの大きさやノーツの中心を切れたかどうかではなく、タイミングのみで点数を出すmodもおもしろいかもしれませんね。ビートセイバーを純粋な音ゲーとして遊ぶ形になります。