実現したいこと
音楽ゲームにおけるノーツ(タップしなければならないタイミング)が正確なタイミングで生成されない。
前提
Unityにて音楽ゲームを制作中です。
音楽ゲームというゲームの仕様上、タップするタイミングを示すオブジェクト(以下ノーツ)が正確なタイミングで生成されなければならないのですが、時間がたつにつれ少しずつ遅れてしまいます。
以下詳細情報です。
発生している問題
ゲームを開始してから時間がたつにつれてノーツの生成が遅れてしまう。
該当のソースコード
C#
1 async UniTask ScorePlay()2 {3 GameObject g;4 var leng = NowScore.ScoreDatas.Split(',')[0].Length;5 var beatcount = 0;6 foreach (var note in NowScore.ScoreDatas)7 {8 switch (note)9 {10 case '0':11 break;12 case '1':13 case '2':14 case '3':15 case '4':16 var direction = (DirectionList)note - '0';17 g = Instantiate(Enemy, SpawnPoint[direction], SpawnRotation[direction], EnemyRoot);18 g.GetComponent<Enemy>().Init(this, EnemySpead, direction);19 break;20 case ',':21 beatcount++;22 leng = NowScore.ScoreDatas.Split(',')[beatcount].Length;23 continue;24 default:25 continue;26 27 }28 await UniTask.Delay((int)(Mathf.Floor((60 / NowScore.BPM) * 4 * 1000 / leng)), delayTiming: PlayerLoopTiming.FixedUpdate);29 if (!PlayingFlug) break;30 }31 Player.GameOver(true);32 }
試したこと
- Unitask.DelayのdelayTimingをFixedUpdateにしてFixed TimeStepを0.001に変更=>曲の序盤は改善されたが曲の終盤にはずれてしまう
- 待機時間の小数点以下を蓄積させ一定値たまったら待機時間に加えるように修正=>改善するどころか余計に遅れてしまう
- foreach内の遅延時間を計測し遅延時間分だけ待機時間から減算=>変化なし
自分で調べたサイト
【Unity】音ゲー制作で曲とテンポずれてしまう
Unityで音ゲーを作った!!(アルゴリズムとソース付き)
【続編!】音ゲーって作れるの?2
上記3サイト様を拝見させていただきましたが、今回の問題とは異なるように感じました。
補足情報(FW/ツールのバージョンなど)
Unity 2021.3.12f
VisalStudio2022
拙い文章かと思いますが、何卒ご指導ご鞭撻のほどよろしくお願いします。
0 コメント