前提・実現したいこと
Unityで音ゲーを作っています。
前回の質問でオブジェクトをリストの順に動かすことができ、そこから音楽のテンポに合わせて等速で移動させられるようにここを参考に改良してみたのですが、メトロノームなどで測ると少しずつずれていることがわかりました。
具体的には、曲とオブジェクト移動を同じタイミングで行った時に、オブジェクトの移動が少しずつ遅れていきます。
また、一拍の秒数がfloatの桁数では足りなくなることがあります。
例:BPM105の曲の1拍の秒数
60 / 105 = 0.571428571428571
その対処法も教えてくださるとありがたいです。
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class MoveToPoints : CustomMonoBehaviour { 6 7 [SerializeField] 8 private List<Vector2> points; 9 10 [SerializeField] 11 private int BPM = 120; 12 13 private float totalTime; 14 15 [SerializeField] 16 private float offset; 17 18 int PrevPointIndex; 19 float startTime; 20 21 private void Start() 22 { 23 startTime = Time.timeSinceLevelLoad + offset; 24 25 //一拍の秒数 = 60 / テンポ 26 totalTime = 60f / (float)BPM; 27 } 28 29 protected void FixedUpdate() 30 { 31 var prevPoint = points[PrevPointIndex]; 32 var nextPoint = points[getIndex(PrevPointIndex)]; 33 34 35 var diff = Time.timeSinceLevelLoad - startTime; 36 var ratio = diff / totalTime; 37 38 var crntPos = Vector2.Lerp(prevPoint, nextPoint, ratio); 39 40 transform.position = crntPos; 41 42 if(ratio >= 1.0f) 43 { 44 startTime = Time.timeSinceLevelLoad; 45 PrevPointIndex = getIndex(PrevPointIndex); 46 } 47 } 48 49 int getIndex(int value) 50 { 51 return value < (points.Count - 1) ? (value + 1) : 0; 52 } 53}
現在どのように音がずれているのでしょうか?(音が早く流れる・遅く流れる・不定期でずれる等々)
回答3件
あなたの回答
tips
プレビュー