前提・実現したいこと
今現在的あてゲームを作っています。
何個かある板(的の生成位置)に、的を生成するコードを書きました。
既に生成した位置には、その的が消えるまでは生成させたくないのですが
手順をメモ帳に書き出してみましたが、いまいちコードが思いつきません。
一度生成した板には生成した的が消えるまで新しい的は生成しない
というコードが書きたいです。
何かいい方法があれば教えてください。
該当のソースコード
c#
1public class TargetSpawn : MonoBehaviour 2{ 3 //Prefabのリスト 4 [Header("prefabリスト")] 5 public GameObject[] targetPrefabs; 6 7 //的の生成位置のリスト 8 [Header("的の位置リスト")] 9 public GameObject[] targets_L; 10 public GameObject[] targets_M; 11 public GameObject[] targets_S; 12 13 private Vector3[] posList_L; 14 private Vector3[] posList_M; 15 private Vector3[] posList_S; 16 17 ///ランダム生成/// 18 [Header("最小.最大インターバル時間設定")] 19 //時間の最小値 20 [SerializeField] float minTime; 21 //時間の最大値 22 [SerializeField] float maxTime; 23 //経過時間 24 private float time = 0f; 25 //インターバル 26 private float interval; 27 28 private bool a; 29 30 void Start() 31 { 32 33 interval = GetRandomTime();//ランダム生成したインターバルを入れる 34 a = true; 35 36 MakePosList(); 37 } 38 39 void Update() 40 { 41 42 //経過時間を入れて計測する 43 time += Time.deltaTime;//時間計測開始 44 45 //経過時間がインターバルを超えたとき 46 if(time > interval && a) 47 { 48 a = true; 49 //ターゲットのサイズを決める数値をランダムに生成 50 var targetSize = Random.Range(0,3); 51 52 //的Prefabから配置する的の位置を生成 53 var numPos = Random.Range(0, posList_L.Length); 54 55 float posCheck = numPos; 56 57 //Posリストのランダム生成値 58 var pos_L = posList_L[Random.Range(0, posList_L.Length)];//PosリストLサイズ 59 var pos_M = posList_M[Random.Range(0, posList_M.Length)];//PosリストMサイズ 60 var pos_S = posList_S[Random.Range(0, posList_S.Length)];//PosリストSサイズ 61 62 //Prefabリストのランダム生成値 63 var targPref = targetPrefabs[Random.Range(0, targetPrefabs.Length)]; 64 65 switch (targetSize) 66 { 67 case 0: //Large 68 Instantiate(targetPrefabs[Random.Range(0, targetPrefabs.Length)], pos_L, transform.rotation); //的生成 69 break; 70 case 1: //Medium 71 Instantiate(targetPrefabs[Random.Range(2, 5)], pos_M, transform.rotation); //的生成 72 break; 73 case 2: //Small 74 Instantiate(targetPrefabs[Random.Range(4, 5)], pos_S, transform.rotation); //的生成 75 break; 76 } 77 78 time = 0f; 79 interval = GetRandomTime();//ランダム生成したインターバルを入れる 80 } 81 } 82 83 84 //ランダムに時間を生成 85 private float GetRandomTime() 86 { 87 return Random.Range(minTime,maxTime); 88 } 89 90 void MakePosList() 91 { 92 //Vector3作成 93 posList_L = new Vector3[targets_L.Length]; 94 posList_M = new Vector3[targets_M.Length]; 95 posList_S = new Vector3[targets_S.Length]; 96 97 //位置リストの中にターゲットのポジションリスト内のオブジェクト座標を入れる 98 for (int i = 0; i < targets_L.Length; i++) 99 { 100 posList_L[i] = targets_L[i].transform.position; 101 } 102 103 //位置リストの中にターゲットのポジションリスト内のオブジェクト座標を入れる 104 for (int i = 0; i < targets_M.Length; i++) 105 { 106 posList_M[i] = targets_M[i].transform.position; 107 } 108 109 //位置リストの中にターゲットのポジシsョンリスト内のオブジェクト座標を入れる 110 for (int i = 0; i < targets_S.Length; i++) 111 { 112 posList_S[i] = targets_S[i].transform.position; 113 } 114 } 115} 116
他にこのコードはもっと簡単に書ける点等、ありましたらご教示お願いします。
回答1件
あなたの回答
tips
プレビュー