質問編集履歴

2

実行したいことをより明確に記述しました

2021/08/31 00:54

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -156,7 +156,7 @@
156
156
 
157
157
  ```
158
158
 
159
- とプログラムを変更しましたが、rightbar[0], leftbar[0]のときしか処理が実行されませんでした。エラーは出ないのでプログラム自体は正しいと思われるのですが、他の部分にミスがあるかもしれないので、別スクリプトのコードを補足情報として記載します。
159
+ とプログラムを変更しましたが、rightbar[0], leftbar[0]のときしか処理が実行されませんでした(rightnumrandom = 1, leftnumrandom = 1にしたら処理が実行、それ以外のrightnumrandom = 2などでは処理が実行されず)。エラーは出ないのでプログラム自体は正しいと思われるのですが、他の部分にミスがあるかもしれないので、別スクリプトのコードを補足情報として記載します。
160
160
 
161
161
 
162
162
 

1

実行したいことをより明確に記述しました

2021/08/31 00:54

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -108,64 +108,546 @@
108
108
 
109
109
 
110
110
 
111
+ 質問内容をまとめると、「計81個に及ぶ処理を簡単に済ませるには、どのような方法がベストでしょうか?」
112
+
113
+
114
+
111
- **試したこと**
115
+ **追記・補足情報**
112
-
113
- 例えばrightbar[0], leftbar[0]のようにゾロ目のパターンの処理は、
114
116
 
115
117
  ```ここに言語を入力
116
118
 
117
- void Update()
119
+ void Update()
118
-
120
+
119
- {
121
+ {
120
-
122
+
121
- for(int i = 0; i <= 8; i++)
123
+ for (int i = 0; i <= 8; i++)
122
-
124
+
123
- {
125
+ {
124
-
126
+
125
- if (migimigiba.GetComponent<BluebarMove>().rightbar[i] == true && hidarihidariba.GetComponent<RedbarMove>().leftbar[i] == true)
127
+ for (int j = 0; j <= 8; j++)
126
-
128
+
127
- {
129
+ {
130
+
128
-
131
+ if (migimigiba.GetComponent<BluebarMove>().rightbar[i] == true && hidarihidariba.GetComponent<RedbarMove>().leftbar[j] == true)
132
+
133
+ {
134
+
129
- a.SetActive(false);
135
+ a.SetActive(false);
130
-
136
+
131
- b.SetActive(true);
137
+ b.SetActive(true);
132
-
138
+
133
- }
139
+ }
134
-
135
-
136
-
140
+
137
- if (migimigiba.GetComponent<BluebarMove>().rightbar[i] == false && hidarihidariba.GetComponent<RedbarMove>().leftbar[i] == false)
141
+ else
138
-
142
+
139
- {
143
+ {
140
-
144
+
141
- a.SetActive(true);
145
+ a.SetActive(true);
142
-
146
+
143
- b.SetActive(false);
147
+ b.SetActive(false);
144
-
148
+
145
- }
149
+ }
146
-
147
- else if (migimigiba.GetComponent<BluebarMove>().rightbar[i] == false || hidarihidariba.GetComponent<RedbarMove>().leftbar[i] == false)
150
+
148
-
149
- {
150
-
151
- a.SetActive(true);
152
-
153
- b.SetActive(false);
154
-
155
- }
151
+ }
156
-
152
+
157
- }
153
+ }
158
-
159
-
160
-
154
+
161
- }
155
+ }
162
-
163
-
164
156
 
165
157
  ```
166
158
 
159
+ とプログラムを変更しましたが、rightbar[0], leftbar[0]のときしか処理が実行されませんでした。エラーは出ないのでプログラム自体は正しいと思われるのですが、他の部分にミスがあるかもしれないので、別スクリプトのコードを補足情報として記載します。
160
+
161
+
162
+
163
+ 1.まず、1から9までの数字をランダムに決め、出た数字に合わせてbool型 rightarea,leftareaをtrueにします。
164
+
165
+ ```ここに言語を入力
166
+
167
+ public class NumberController : MonoBehaviour
168
+
169
+ {
170
+
171
+ public Text rightnum;
172
+
173
+ public Text leftnum;
174
+
175
+ public int rightnumrandom;
176
+
177
+ public int leftnumrandom;
178
+
179
+
180
+
181
+ public bool[] rightarea = new bool[9];
182
+
183
+ public bool[] leftarea = new bool[9];
184
+
185
+
186
+
187
+
188
+
189
+ // Start is called before the first frame update
190
+
191
+ void Start()
192
+
193
+ {
194
+
195
+ for (int i = 0; i <= 8; i++)
196
+
197
+ {
198
+
199
+ rightarea[i] = false;
200
+
201
+ }
202
+
203
+
204
+
205
+ for (int i = 0; i <= 8; i++)
206
+
207
+ {
208
+
209
+ leftarea[i] = false;
210
+
211
+ }
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+ rightnumrandom = Random.Range(1, 10);
220
+
221
+ //rightnumrandom = 1;
222
+
223
+ this.rightnum = GameObject.Find("RightNumText").GetComponent<Text>();
224
+
225
+ rightnum.text = rightnumrandom.ToString();
226
+
227
+
228
+
229
+ leftnumrandom = Random.Range(1, 10);
230
+
231
+ //leftnumrandom = 1;
232
+
233
+ this.leftnum = GameObject.Find("LeftNumText").GetComponent<Text>();
234
+
235
+ leftnum.text = leftnumrandom.ToString();
236
+
237
+
238
+
239
+ }
240
+
241
+
242
+
243
+ // Update is called once per frame
244
+
245
+ void Update()
246
+
247
+ {
248
+
249
+ if (rightnumrandom == 1)
250
+
251
+ {
252
+
253
+ rightarea[0] = true;
254
+
255
+ Debug.Log("右1");
256
+
257
+ }
258
+
259
+ //補足・・・rightarea[1]からrightarea[8]の処理(if文)も同じなので、割愛
260
+
261
+
262
+
263
+ if (leftnumrandom == 1)
264
+
265
+ {
266
+
267
+ leftarea[0] = true;
268
+
269
+ Debug.Log("左1");
270
+
271
+ }
272
+
273
+ //補足・・・leftarea[1]からleftarea[8]の処理(if文)も同じなので、割愛
274
+
275
+ }
276
+
277
+ }
278
+
279
+ ```
280
+
281
+ 2.次に、rightarea, leftareaの判定結果を元に、bool型 rightbar, leftbarをtrueまたはfalseにします。rightbarとleftbarはそれぞれ別のスクリプトで管理しており、内容はrightとleftの違いだけなので、以下にrightのときのスクリプトを記載します。
282
+
283
+ ```ここに言語を入力
284
+
285
+ public class BluebarMove : MonoBehaviour
286
+
287
+ {
288
+
289
+ GameObject rightleftnum;
290
+
291
+ public bool[] rightbar = new bool[9];
292
+
293
+
294
+
295
+
296
+
297
+ bool push = false;
298
+
299
+ GameObject Migibar;
300
+
301
+
302
+
303
+ void Start()
304
+
305
+ {
306
+
307
+ rightleftnum = GameObject.Find("RightLeftNum");
308
+
309
+ Migibar = GameObject.FindGameObjectWithTag("migibar");
310
+
311
+
312
+
313
+ for (int i = 0; i <= 8; i++)
314
+
315
+ {
316
+
317
+ rightbar[i] = false;
318
+
319
+ }
320
+
321
+
322
+
323
+ }
324
+
325
+
326
+
327
+ public void PushDown()
328
+
329
+ {
330
+
331
+ push = true;
332
+
333
+ }
334
+
335
+
336
+
337
+ public void PushUp()
338
+
339
+ {
340
+
341
+ push = false;
342
+
343
+ }
344
+
345
+
346
+
347
+
348
+
349
+ // Update is called once per frame
350
+
351
+ void Update()
352
+
353
+ {
354
+
355
+ if ((push == true) && (Migibar.transform.position.x > 1.41f))
356
+
357
+ {
358
+
359
+ Migibar.transform.Translate(-0.01f, 0, 0);
360
+
361
+ }
362
+
363
+ else if ((push == true) && (Migibar.transform.position.x <= 1.41f))
364
+
365
+ {
366
+
367
+ Migibar.transform.Translate(0, 0, 0);
368
+
369
+ }
370
+
371
+ else if ((push == false) && (Migibar.transform.position.x < 4.18f))
372
+
373
+ {
374
+
375
+ Migibar.transform.Translate(0.007f, 0, 0);
376
+
377
+ }
378
+
379
+ else if ((push == false) && (Migibar.transform.position.x >= 4.18f))
380
+
381
+ {
382
+
383
+ Migibar.transform.Translate(0, 0, 0);
384
+
385
+ }
386
+
387
+
388
+
389
+
390
+
391
+ Transform myTransform = this.transform;
392
+
393
+ Vector3 migibapos = myTransform.position;
394
+
395
+
396
+
397
+ if (rightleftnum.GetComponent<NumberController>().rightarea[0] == true)
398
+
399
+ {
400
+
401
+ if(migibapos.x <= 3.551f && migibapos.x >= 3.32f)
402
+
403
+ {
404
+
405
+ rightbar[0] = true;
406
+
407
+ Debug.Log("OK右1");
408
+
409
+ }
410
+
411
+ else if(migibapos.x < 3.32f || migibapos.x > 3.551f)
412
+
413
+ {
414
+
415
+ rightbar[0] = false;
416
+
417
+ Debug.Log("はずれた右1");
418
+
419
+ }
420
+
421
+ }
422
+
423
+
424
+
425
+ if(rightleftnum.GetComponent<NumberController>().rightarea[1] == true)
426
+
427
+ {
428
+
429
+ if (migibapos.x <= 3.32f && migibapos.x >= 3.089f)
430
+
431
+ {
432
+
433
+ rightbar[1] = true;
434
+
435
+ Debug.Log("OK右2");
436
+
437
+ }
438
+
439
+ else if (migibapos.x < 3.089f || migibapos.x > 3.32f)
440
+
441
+ {
442
+
443
+ rightbar[1] = false;
444
+
445
+ Debug.Log("はずれた右2");
446
+
447
+ }
448
+
449
+ }
450
+
451
+
452
+
453
+ if (rightleftnum.GetComponent<NumberController>().rightarea[2] == true)
454
+
455
+ {
456
+
457
+ if (migibapos.x <= 3.089f && migibapos.x >= 2.858f)
458
+
459
+ {
460
+
461
+ rightbar[2] = true;
462
+
463
+ Debug.Log("OK右3");
464
+
465
+ }
466
+
467
+ else if (migibapos.x < 2.858f || migibapos.x > 3.089f)
468
+
469
+ {
470
+
471
+ rightbar[2] = false;
472
+
473
+ Debug.Log("はずれた右3");
474
+
475
+ }
476
+
477
+ }
478
+
479
+
480
+
481
+ if (rightleftnum.GetComponent<NumberController>().rightarea[3] == true)
482
+
483
+ {
484
+
485
+ if (migibapos.x <= 2.858f && migibapos.x >= 2.627f)
486
+
487
+ {
488
+
489
+ rightbar[3] = true;
490
+
491
+ Debug.Log("OK右4");
492
+
493
+ }
494
+
495
+ else if (migibapos.x < 2.627f || migibapos.x > 2.858f)
496
+
497
+ {
498
+
499
+ rightbar[3] = false;
500
+
501
+ Debug.Log("はずれた右4");
502
+
503
+ }
504
+
505
+ }
506
+
507
+
508
+
509
+ if (rightleftnum.GetComponent<NumberController>().rightarea[4] == true)
510
+
511
+ {
512
+
513
+ if (migibapos.x <= 2.627f && migibapos.x >= 2.396f)
514
+
515
+ {
516
+
517
+ rightbar[4] = true;
518
+
519
+ Debug.Log("OK右5");
520
+
521
+ }
522
+
523
+ else if (migibapos.x < 2.396f || migibapos.x > 2.627f)
524
+
525
+ {
526
+
527
+ rightbar[4] = false;
528
+
529
+ Debug.Log("はずれた右5");
530
+
531
+ }
532
+
533
+ }
534
+
535
+
536
+
537
+ if (rightleftnum.GetComponent<NumberController>().rightarea[5] == true)
538
+
539
+ {
540
+
541
+ if (migibapos.x <= 2.396f && migibapos.x >= 2.165f)
542
+
543
+ {
544
+
545
+ rightbar[5] = true;
546
+
547
+ Debug.Log("OK右6");
548
+
549
+ }
550
+
551
+ else if (migibapos.x < 2.165f || migibapos.x > 2.396f)
552
+
553
+ {
554
+
555
+ rightbar[5] = false;
556
+
557
+ Debug.Log("はずれた右6");
558
+
559
+ }
560
+
561
+ }
562
+
563
+
564
+
565
+ if (rightleftnum.GetComponent<NumberController>().rightarea[6] == true)
566
+
567
+ {
568
+
569
+ if (migibapos.x <= 2.165f && migibapos.x >= 1.934f)
570
+
571
+ {
572
+
573
+ rightbar[6] = true;
574
+
575
+ Debug.Log("OK右7");
576
+
577
+ }
578
+
579
+ else if (migibapos.x < 1.934f || migibapos.x > 2.165f)
580
+
581
+ {
582
+
583
+ rightbar[6] = false;
584
+
585
+ Debug.Log("はずれた右7");
586
+
587
+ }
588
+
589
+ }
590
+
591
+
592
+
593
+ if (rightleftnum.GetComponent<NumberController>().rightarea[7] == true)
594
+
595
+ {
596
+
597
+ if (migibapos.x <= 1.934f && migibapos.x >= 1.703f)
598
+
599
+ {
600
+
601
+ rightbar[7] = true;
602
+
603
+ Debug.Log("OK右8");
604
+
605
+ }
606
+
607
+ else if (migibapos.x < 1.703f || migibapos.x > 1.934f)
608
+
609
+ {
610
+
611
+ rightbar[7] = false;
612
+
613
+ Debug.Log("はずれた右8");
614
+
615
+ }
616
+
617
+ }
618
+
619
+
620
+
621
+ if(rightleftnum.GetComponent<NumberController>().rightarea[8] == true)
622
+
623
+ {
624
+
625
+ if (migibapos.x <= 1.703f && migibapos.x >= 1.472f)
626
+
627
+ {
628
+
629
+ rightbar[8] = true;
630
+
631
+ Debug.Log("OK右9");
632
+
633
+ }
634
+
635
+ else if (migibapos.x < 1.472f || migibapos.x > 1.703f)
636
+
637
+ {
638
+
639
+ rightbar[8] = false;
640
+
641
+ Debug.Log("はずれた右9");
642
+
643
+ }
644
+
645
+ }
646
+
647
+ }
648
+
649
+ }
650
+
651
+ ```
652
+
167
- ば、こだけの行でうまく行くのかなと期待ましたが、処理が全く実行されなかったので、恐らく間違っているのだと思います。
653
+ 3.rightbarleftbarがそtrueとき(計81パターン)に実行したいのが、質問スクリプトの内容です。
168
-
169
-
170
-
171
- 質問内容をまとめると、「計81個に及ぶ処理を簡単に済ませるには、どのような方法がベストでしょうか?」