Skip to content
第03回 リズムゲーム2

4 / 7 BeatとTickで譜面の時間を決める ​

このステップの目的

1拍をTickへ分け、CSVの行番号からノーツを押す時刻を計算します。

完成見本の二つの表示を読む ​

完成見本のバー全体は、1拍の始まりで明るくなり、次の拍へ向けて暗くなります。これがBeatの表示です。その下のTickは、現在の区画だけを強調します。カーソルは拍の間を連続して進みます。

Tickは、この譜面で1拍を細かく分けた時間単位です。4分割なら、番号0、1、2、3を通って次の拍の0へ戻ります。4は固定の個数ではなく、CSVのticksPerBeatで決まります。

曲の開始から表示は進みますが、ノーツの最初の行を置く時刻はoffset秒です。表示もその位置へ合う拍の周期を使うため、曲の0秒から動かしても、譜面の時刻は変わりません。

BPMから1行の長さを求める ​

BPMは1分間の拍数です。120 BPMなら1拍は60 / 120 = 0.5秒です。1拍を4 Tickへ分けると、1 Tickは0.5 / 4 = 0.125秒になります。

text
1拍の秒数 = 60 / BPM
1 Tickの秒数 = 60 / BPM / ticksPerBeat
判定時刻 = offset + Tick番号 × 1 Tickの秒数

120 BPMのまま2 Tick/拍へ変えたら、1 Tickは何秒になりますか。Beatの周期とTickの切り替わりのどちらが変わるか、式と見本から説明してください。同梱曲は114 BPMなので、演奏用のCSVは音源と同じ114を使います。

設定行とノーツ行を分ける ​

次は時刻を計算するための説明用CSVです。ノーツを置く部分はnotesから始まります。120 BPMの数値例なので、同梱曲の演奏用CSVとは区別してください。

csv
title,Sample Track
audio,sample-track.ogg
bpm,120
ticksPerBeat,4
offset,1.5
notes
# レーン1,レーン2,レーン3,レーン4
1,0,0,0
0,0,0,0
0,1,0,0
0,0,0,0
0,0,1,1
設定意味
title画面に表示する曲名
audioInspectorで指定したAudio Clipと照合する音源名
bpm1分間の拍数、0より大きい値
ticksPerBeat1拍の分割数、正の整数
offset最初の数値行を置く時刻、0以上の秒数

最初の数値行がTick 0です。上の例では、レーン1が1.5秒、レーン2が1.75秒、レーン3と4が2.0秒になります。最後の二つは同じ行なので同時押しです。

audioは音源を自動で読み込む命令ではありません。SceneのAudio SourceにAudio Clipを設定し、ファイル名を照合します。この簡易CSVでは値にカンマや改行を含めず、小数点は.で書きます。

休符も時間の1行として数える ​

0,0,0,0は、ノーツを置かずに1 Tick進める休符です。空行と#で始まるコメントは読み飛ばし、時間を進めません。最初の数値行が休符でも、その行がTick 0になります。

4拍を1小節として数えるなら、4 Tick/拍で1小節は16行、4小節は64行です。CSV自体に拍子の設定はないので、曲の拍子を確かめてから小節として数えます。

説明用CSVに休符を1行追加した場合と、コメントを1行追加した場合で、後ろの同時押しが何秒になるか予想してください。実際の読み取り処理を次のステップで作り、その違いを確かめます。

チェックリスト
  • 1拍と1 Tickの秒数を計算できる。
  • Tick 0とoffsetの関係を説明できる。
  • 休符、コメント、同時押しが時刻へ与える影響を予想した。