teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記2

2018/07/26 10:14

投稿

fiveHundred
fiveHundred

スコア10454

answer CHANGED
@@ -48,4 +48,50 @@
48
48
  timeTrigger = Time.time;
49
49
  }
50
50
  }
51
+ ```
52
+
53
+ ---
54
+
55
+ 追記2:
56
+
57
+ これでも直らないということは、おそらく「連射速度が早すぎて、遅い環境だと1フレームに2個生成させないと速い環境に追いつかない」のが原因ではないかなと思います。
58
+ 以下のようにするのはどうでしょうか?
59
+
60
+ ```C#
61
+ void Update()
62
+ {
63
+ if (Shootstate == true)
64
+ {
65
+
66
+ int loopCount = 0; // 追加
67
+
68
+ // 変更
69
+ // 2個以上生成させる為にwhile文に変更
70
+ while (Time.time > timeTrigger)
71
+ {
72
+
73
+ Instantiate(UpBullet);
74
+
75
+ // 変更
76
+ // そのままだと弾が重なってしまうので、前進方向にずらす
77
+ // Vector3の距離と向きは適当なので、調節すること
78
+ // 厳密にやる場合は、時間に応じてVector3の位置を微調整するようにすればよい
79
+ UpBullet.transform.position = motherTf.position + loopCount * new Vector3(0f, -1f, 0f);
80
+
81
+ timeTrigger += timeOut;
82
+
83
+ loopCount++; // 追加
84
+ }
85
+ }
86
+ }
87
+
88
+ public void StartShoot()
89
+ {
90
+ if (Shootstate == false)
91
+ {
92
+ Shootstate = true;
93
+
94
+ timeTrigger = Time.time;
95
+ }
96
+ }
51
97
  ```

1

追記

2018/07/26 10:14

投稿

fiveHundred
fiveHundred

スコア10454

answer CHANGED
@@ -8,4 +8,44 @@
8
8
 
9
9
  ([引用元](https://docs.unity3d.com/ja/current/ScriptReference/WaitForSeconds.html))
10
10
 
11
- 私にはいい方法が思いつきませんが、時間を取得して弾の位置や個数を補正すればよいと思います。
11
+ 私にはいい方法が思いつきませんが、時間を取得して弾の位置や個数を補正すればよいと思います。
12
+
13
+ ---
14
+
15
+ 追記:
16
+
17
+ Update()の呼ばれるタイミングも不定です。
18
+ 「timeTrigger = Time.time + timeOut;」としてしまうと、(遅れる可能性のある)現在の時間からtimeOut秒後ということになるので、やっていることは変更前のソースコードと何も変わりません。
19
+
20
+ なので、以下のようにする必要があります。
21
+
22
+ ```C#
23
+ void Update()
24
+ {
25
+ if (Shootstate == true)
26
+ {
27
+
28
+ if (Time.time > timeTrigger)
29
+ {
30
+
31
+ Instantiate(UpBullet);
32
+ UpBullet.transform.position = motherTf.position;
33
+
34
+ // 変更
35
+ timeTrigger += timeOut;
36
+
37
+ }
38
+ }
39
+ }
40
+
41
+ public void StartShoot()
42
+ {
43
+ if (Shootstate == false)
44
+ {
45
+ Shootstate = true;
46
+
47
+ // 追加
48
+ timeTrigger = Time.time;
49
+ }
50
+ }
51
+ ```