コードを大幅に修正しました。
[処理内容]
-
- objctsに指定したGameObjectをランダムで出力
-
- すべて出力完了後、配列をランダムにリセット
- 1、2の順で永遠にループ
- 止めたい場合はstopLandObjLoop()を実行する
コードは未検証です。コメントを入れているので挙動がおかしかったらご自分で修正してください。
C#
1using UnityEngine;
2using System.Linq;
3using System;
4using System.Collections;
5
6public class createRandObjs : MonoBehaviour
7{
8 //とりあえずインスペクタからオブジェクトを追加
9 [SerializeField]
10 GameObject[] objcts;
11
12 //何秒おきに出力するかを指定
13 static readonly float LOOP_INTERVAL = 3f;
14
15 //Coroutineをキャッシュする変数
16 Coroutine landObjLoopCorutine;
17
18 void Start()
19 {
20 // 実行
21 startLandObjLoop();
22 }
23
24
25 /// <summary>
26 /// ループのスタート
27 /// </summary>
28 void startLandObjLoop()
29 {
30 //このGameObjectが非表示の時にlandObjLoopを実行されるとエラーになるのでその場合実行させない
31 if (!gameObject.activeInHierarchy)
32 {
33 #if UNITY_EDITOR
34 Debug.Log("このオブジェクト非表示中だから実行できないよ");
35 #endif
36
37 return;
38 }
39
40 //実行中なら重複するので一旦停止
41 stopLandObjLoop();
42
43 //オブジェクトの出力をスタート
44 StartCoroutine( landObjLoop() );
45 }
46
47
48 /// <summary>
49 /// ループのストップ
50 /// </summary>
51 void stopLandObjLoop()
52 {
53 if (landObjLoopCorutine != null) StopCoroutine(landObjLoopCorutine);
54 }
55
56
57 /// <summary>
58 /// オブジェクトを出力する
59 /// </summary>
60 void instantiateObj(int idx)
61 {
62 //とりあえずVector3.zero地点にオブジェクトを生成
63 Instantiate(objcts[idx], Vector3.zero, Quaternion.identity);
64 }
65
66
67 /// <summary>
68 /// objctsをランダムに出力し続ける
69 /// </summary>
70 IEnumerator landObjLoop()
71 {
72 //オブジェクトが無ければ何もせず終了
73 if (objcts.Length == 0) yield break;
74
75 var waitTime = new WaitForSeconds( LOOP_INTERVAL );
76
77 //順番にカウントするための変数
78 var idx = 0;
79 //ランダムなインデックスを格納する配列
80 var objIdxAry = new int[objcts.Length];
81
82 while(true)
83 {
84 //idxが0またはobjctsの数に達したらリセット
85 if(idx == 0 || idx == objcts.Length)
86 {
87 idx = 0;
88 objIdxAry = Enumerable.Range(0, objcts.Length).OrderBy(n => Guid.NewGuid()).ToArray();
89 }
90
91 instantiateObj(objIdxAry[idx]);
92 idx++;
93
94 yield return waitTime;
95 }
96 }
97}
遅延処理 Coroutine(コルーチン)の使い方について過去に回答したので見てみてください。
https://teratail.com/questions/93115
退会済みユーザー
2017/10/03 13:17
2017/10/03 13:33
退会済みユーザー
2017/10/03 22:20
2017/10/04 07:38 編集
退会済みユーザー
2017/10/04 08:02
2017/10/04 08:50
退会済みユーザー
2017/10/04 09:11