回答編集履歴

2

追記2

2018/07/26 10:14

投稿

fiveHundred
fiveHundred

スコア9803

test CHANGED
@@ -99,3 +99,95 @@
99
99
  }
100
100
 
101
101
  ```
102
+
103
+
104
+
105
+ ---
106
+
107
+
108
+
109
+ 追記2:
110
+
111
+
112
+
113
+ これでも直らないということは、おそらく「連射速度が早すぎて、遅い環境だと1フレームに2個生成させないと速い環境に追いつかない」のが原因ではないかなと思います。
114
+
115
+ 以下のようにするのはどうでしょうか?
116
+
117
+
118
+
119
+ ```C#
120
+
121
+ void Update()
122
+
123
+ {
124
+
125
+ if (Shootstate == true)
126
+
127
+ {
128
+
129
+
130
+
131
+ int loopCount = 0; // 追加
132
+
133
+
134
+
135
+ // 変更
136
+
137
+ // 2個以上生成させる為にwhile文に変更
138
+
139
+ while (Time.time > timeTrigger)
140
+
141
+ {
142
+
143
+
144
+
145
+ Instantiate(UpBullet);
146
+
147
+
148
+
149
+ // 変更
150
+
151
+ // そのままだと弾が重なってしまうので、前進方向にずらす
152
+
153
+ // Vector3の距離と向きは適当なので、調節すること
154
+
155
+ // 厳密にやる場合は、時間に応じてVector3の位置を微調整するようにすればよい
156
+
157
+ UpBullet.transform.position = motherTf.position + loopCount * new Vector3(0f, -1f, 0f);
158
+
159
+
160
+
161
+ timeTrigger += timeOut;
162
+
163
+
164
+
165
+ loopCount++; // 追加
166
+
167
+ }
168
+
169
+ }
170
+
171
+ }
172
+
173
+
174
+
175
+ public void StartShoot()
176
+
177
+ {
178
+
179
+ if (Shootstate == false)
180
+
181
+ {
182
+
183
+ Shootstate = true;
184
+
185
+
186
+
187
+ timeTrigger = Time.time;
188
+
189
+ }
190
+
191
+ }
192
+
193
+ ```

1

追記

2018/07/26 10:14

投稿

fiveHundred
fiveHundred

スコア9803

test CHANGED
@@ -19,3 +19,83 @@
19
19
 
20
20
 
21
21
  私にはいい方法が思いつきませんが、時間を取得して弾の位置や個数を補正すればよいと思います。
22
+
23
+
24
+
25
+ ---
26
+
27
+
28
+
29
+ 追記:
30
+
31
+
32
+
33
+ Update()の呼ばれるタイミングも不定です。
34
+
35
+ 「timeTrigger = Time.time + timeOut;」としてしまうと、(遅れる可能性のある)現在の時間からtimeOut秒後ということになるので、やっていることは変更前のソースコードと何も変わりません。
36
+
37
+
38
+
39
+ なので、以下のようにする必要があります。
40
+
41
+
42
+
43
+ ```C#
44
+
45
+ void Update()
46
+
47
+ {
48
+
49
+ if (Shootstate == true)
50
+
51
+ {
52
+
53
+
54
+
55
+ if (Time.time > timeTrigger)
56
+
57
+ {
58
+
59
+
60
+
61
+ Instantiate(UpBullet);
62
+
63
+ UpBullet.transform.position = motherTf.position;
64
+
65
+
66
+
67
+ // 変更
68
+
69
+ timeTrigger += timeOut;
70
+
71
+
72
+
73
+ }
74
+
75
+ }
76
+
77
+ }
78
+
79
+
80
+
81
+ public void StartShoot()
82
+
83
+ {
84
+
85
+ if (Shootstate == false)
86
+
87
+ {
88
+
89
+ Shootstate = true;
90
+
91
+
92
+
93
+ // 追加
94
+
95
+ timeTrigger = Time.time;
96
+
97
+ }
98
+
99
+ }
100
+
101
+ ```