Skip to content
第02回 ゲームと時間

1 / 4 時間の単位 ​

このステップの目的

時刻と時間の長さを区別し、秒・拍・Tickを換算します。

時間と時計 ​

日常生活では、言葉としての時間を「時刻」と「時間の長さ」の両方の意味で使いますが、本来両者は別の概念です。

時刻は時間軸上の位置を表します。
時間の長さは、ある時刻から別の時刻までの間隔を表します。

「授業が9時に始まる」の9時は時刻です。
「授業が始まってから3分たった」の3分は時間の長さです。

時刻は時間軸上の位置を表し、二つの時刻の差から求められるのが時間の長さです。

また、時計は時刻や経過した時間を知るためのものです。

通常、コンピューターには正確な時計が内蔵されており、プログラムから利用することができます。
プログラムが処理にかかった時間や予定した処理を始める時刻を調べる際は、こうしたハードウエア時計の値を使います。

さて、ゲームでは「現実の何時何分か」という直接的な時間だけではなく、「ゲームが始まってから何秒か」「キャラクターがダメージを受けてから何秒か」「曲が始まってから何秒か」といった、様々な時間軸での時間が必要になります。
また、これらの時間は求められる正確さも、時には時間の進む速さすらも異なります。

時間の速度が異なれば、必ずしも物理的に正確な時計ばかりを使うわけにはいきません。
それぞれの時間軸を適切に扱うための、概念的な時計が必要になります。

こうした時間の扱いと使い分け方、その実装について学ぶのが今回のテーマです。

様々な時間の単位 ​

秒と拍 ​

秒は時間の長さを表す単位です。
物理的な単位として、国際的に定義されています。

INFO

秒は国際単位系(SI)における時間の基本単位であり、正確に定義されています。
具体的には、セシウム133原子の基底状態の二つの超微細準位間の遷移に対応する放射の9,192,631,770周期の継続時間です。

ゲームで時間を扱う上で、ここまでの厳密さが求められることはほとんどありません。
しかし、ゲーム全体で時間の扱いを疎かにできないことに変わりはありません。

そして時間を扱うのは、秒のような絶対的な時間の単位ばかりではありません。
拍やTickといった、音楽に基づく相対的な時間の単位も使われます。

音楽では、一定の間隔で「1、2、3、4」と数える基準を拍と呼びます。
例えば四拍子なら、1小節は1、2、3、4の4拍で構成されます。

一方で、曲の速さは一定ではなく、テンポが変わることもあります。
この場合、拍子が変わらなくとも拍の長さが変わることになります。
つまり、曲の中での時間の速さは変動します。

また、ゲームにおいてもバレットタイムや演出の早送り機能などのように、時間の進み方が変わることがあります。
こうして考えると、時間の速さは一定ではなく、むしろ多くの場合相対的で、状況や文脈によって変化するものだと言えます。

それぞれの事情で設定されたこれら個別の時間軸を、コンピューター上で動作するプログラムから適切に扱うにはどうするかが問題です。

BPM ​

BPMはBeats Per Minuteの略で、1分間の拍数を表します。
60 BPMなら1分間に60拍なので1拍は1秒、120 BPMなら1拍は0.5秒です。

text
1拍の秒数 = 60 / BPM
BPM1拍の秒数4拍分の秒数
6014
1200.52
1500.41.6

120 BPMで、1拍の中に二つのノートを置いてもBPMは120のままです。
BPMは拍の速さを示し、押す回数は譜面の配置で決まります。

INFO

曲によってテンポは異なり、曲の途中でテンポが変動する曲も珍しくありません。
中には拍子まで変わる曲もあります。

今回の配布サンプルに同梱された曲のテンポは、一定で114 BPMです。
この実習では例外的なことは考えず、そのままのBPMを使用して譜面を作成します。

Tick ​

曲の拍子に限らず、なんらかの理由で時間を刻む単位を設けると便利です。
こうした概念上の時間をTickと呼ぶことがあります。

INFO

時計のチクタク(Tick-Tack)から来ています。
単位として定義されているわけではありませんが、時間を刻む目安として広く使われています。

Tickの意味は様々です。
例えばOSでのプログラム切り替えの単位時間や、Unreal Engineではフレームごとの処理を表す単位としてTickが使われています。

この教材では、曲の1拍をさらに分割し、譜面を扱う単位としてTickを使用します。
120 BPM/4 Tickなら、1 Tickは60 / 120 / 4 = 0.125秒です。

全体のTick番号拍で表した位置秒で表した位置
00拍0秒
11/4拍0.125秒
21/2拍0.25秒
41拍0.5秒
82拍1秒

この教材でのTickは、譜面を記述しやすくするために設けられた概念上の時間単位です。
ここでは譜面ごとに設定されたTicksPerBeatの値によって、1拍が何Tickに分割されるかが決まります。

チェックリスト
  • 時刻と時間の長さを、具体例を使って区別できる。
  • 90 BPMの1拍、120 BPM・2 Tick/拍の1 Tickを秒へ換算した。