前提・実現したいこと
Unityを使用しています。
- 実現したい内容 …
time(Time.deltaTime)を使ってランプ(discriminative1)の点滅を操作しているのですが、timeの挙動が思った通りになりません。
・ランプ(discriminative1)の点滅は、消灯時にはdiscriminative1_offがactiveになってdiscriminative1_onがnotactiveになるようにしていて、点灯時にはその逆になっています。ランプの管理は下記の図のとおりです。
・timeがゲーム開始してからfirst_startで設定した時間になるとランプが点灯し、d1_finishで設定した時間になると消灯するようになっています。そして、消灯と同時にtimeが0にリセットされます。
・2回目以降のランプの点滅は、timeがゲーム開始してからd1_intervalで設定した時間になるとランプが点灯し、d1_finishで設定した時間になると消灯するようになっています。そして、消灯と同時にtimeが0にリセットされます。
・図にすると下記の通りになります。緑色が点灯、白色が消灯を示しています。
Debug.Log(time)でtimeの挙動を確認しているのですが、途中で秒数のカウントが思ったようになりません。
実行したコードとその結果
実行したコード
このようなコードを実行しました。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class discriminative_script : MonoBehaviour 6{ 7 private float time; 8 public GameObject discriminative1_off; 9 public GameObject discriminative1_on; 10 11 public float first_start; 12 13 public float d1_finish; 14 public float d1_interval; 15 16 bool first_on = true; 17 18 19 void d1_on() 20 { 21 discriminative1_off.SetActive(false); 22 discriminative1_on.SetActive(true); 23 } 24 25 26 void reset_time() 27 { 28 discriminative1_off.SetActive(true); 29 discriminative1_on.SetActive(false); 30 time = 0; 31 } 32 33 34 void Update() 35 { 36 time += Time.deltaTime; 37 38 if (first_on == true) 39 { 40 if ((time >= first_start) && (time <= (d1_finish + first_start))) 41 { 42 d1_on(); 43 Invoke("reset_time", (d1_finish)); 44 first_on = false; 45 } 46 } 47 48 if (first_on == false) 49 { 50 if ((time >= d1_interval) && (time <= (d1_finish + d1_interval))) 51 { 52 d1_on(); 53 Invoke("reset_time", (d1_finish)); 54 } 55 } 56 57 Debug.Log(time); 58 59 } 60} 61
実行した結果
上記のコードを実行した結果、
Debug.Log(time)の挙動は以下のようになりました。
first_startは3
d1_finishは5
d1_intervalは5に設定しています。
C#
10.02 20.04 3... 41.02671 51.049601 6... 72.030034 82.051696 9... 103.038296 113.062701 12... 134.030018 144.047465 15... 165.121522 175.138619 18... 196.107556 206.132473 21... 227.03747 237.054451 24... 258.016535 260.0165681←「ここから問題個所:1秒以上経過しているのに小数点以下しか記録されない」 270.0333383 280.0583819 29... 300.874075 310.9010224 320.9274291 330.9529947 340.9798648 351.007345 361.034972 371.061016←「1秒以上経過してからようやく1秒を記録」 38... 39
本来得たい結果
本来は、「0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 2, ...」のように、first_start、d1_finish、d1_intervalで設定したとおりの挙動を得たいです。
回答1件
あなたの回答
tips
プレビュー