前提・実現したいこと
Time.deltaTimeを用いて、開始から現在までの経過時間を測定しています。
回転や移動などの処理はせず、ただ経過時間を測っているだけであり、1ステップごとに約20ms(0.02秒)程度かかります。
つまり1ステップごとに『20 → 40 → 60 → 80 → 100 → 120...』と増加していくはずなのですが、4ステップ目の更新のみ340msかかってしまいます
『20 → 40 → 60 → 400 → 420 → 440...』といった具合にです
4ステップ目だけ複雑な命令を出しているわけでもないのに、340msもかかってしまう理由がわかりません。
これが起こる原因並びにその解決策、または1ステップごとに同じ経過時間を計測できる方法を探しています
これを使用したいプロジェクトについて
現実時間と連動したゲームを制作しており、「ゲーム開始からの経過時間(ms)をiとした場合」に、ある経過時間になったとき特定の動作をするようなものです(例:開始から100msたったら(i = 100)90度回転、230ms(i = 230)たったら10移動)
1回Updateをするのに20msかかるため、例えばi = 20でUpdateをすると次のiは40となります。この際、例えば30msのときに特定の動作をするようになっていると、21~39はiに入らないため(i = 20 → i = 40)この命令を飛ばしてしまいます。
そのため、動作をさせるかどうかの判断を「if i == 30」ではなく「if i == 30 || abs(i - 30 ) <= 10」としています。こうすることで、iが40であっても30で実行するはずだった命令を行えるようにしています。しかし、このコーディングは、updateの間隔が一定であるという前提で組んでいるため4ステップ目の更新のみ340msかかってしまうと、行いたい挙動をプログラムが行ってくれなくなってしまいます
加えて、上記のような処理は、void Start、void Updateのどちらにも用いたいため、「1回目のUpdateで1秒待ってから経過時間を測る」ような処理は、うまくいかない可能性があります、、、
発生している問題・エラーメッセージ
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class timekeisoku : MonoBehaviour 6{ 7 int i = 0; 8 float totaltime; 9 10 // Start is called before the first frame update 11 void Start() 12 { 13 totaltime = totaltime + Time.deltaTime; 14 i = (int)(totaltime * 1000.0f); 15 UnityEngine.Debug.Log("経過時間は ==" + i); 16 } 17 18 // Update is called once per frame 19 void Update() 20 { 21 totaltime = totaltime + Time.deltaTime; 22 i = (int)(totaltime * 1000.0f); 23 UnityEngine.Debug.Log("経過時間は ==" + i); 24 25 } 26}
試したこと
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/11 08:30