音ゲーを作ったのでその時の知見をまとめておきます
前提として今回は一定の速度でノーツが移動します
beatmaniaIIDXのSOFT LANDING ON THE BODYのようなソフランは考慮していませんが、最初からノーツスピードが遅く流れてくる太鼓の達人のようなソフランは対応できます
ノーツの移動
update(){
this.gameObject.transform.Translate(0, "ノーツの移動速度" * Time.deltaTime, 0);
}
//ノーツの移動速度の計算方法
speed = "曲のノーツスピード" * "プレイヤーが設定したノーツスピード" * "曲のBPM" / 60;
原型
座標 = "曲のBPM" / 60 * "ノーツをタップする時間" * "曲のノーツスピード" + "曲のオフセット";
プレイヤーが設定をいじる場合
座標 = "曲のBPM" / 60 * "ノーツをタップする時間" * "曲のノーツスピード" * "プレイヤーが設定したノーツスピード" + "曲のオフセット" + "プレイヤーの設定したオフセット";
//この際、曲のノーツスピードは基本値を1にしておくこと
このように座標の計算ができる
おまけ
スコア計算について
最終的に1000000になるように1ノーツあたりのスコアを計算して足していく方法が最初に思いついたが、細かすぎる計算はあまりきれいに出ない
何なら1000000にならないことが多々あった
別の方法として割合で計算する方法がある
score = (int)((float)1000000 * (((((float)"最高判定の数" * (float)2) + (float)"ひとつ下の判定" )/ ((float)"すべてのノーツ数" * (float)2))));