###前提・実現したいこと
プログラム初心者です。
Unityで01234の数字が入っているリストを用意して、
そのリストからランダムに1つの数字を抜き出して使い、
もしその数字を使ってしまっている場合は他の数字をランダムで
抜き出して使う。
それをリストに残っている数分実行したいのです。
###発生している問題・エラーメッセージ
無限ループから脱出できないのか、フリーズします・・・。
知識が薄く大変申し訳ありませんがご助力いただけると助かります。
###該当のソースコード
C# ここに言語を入力
ここにご自身が実行したソースコードを書いてください
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class RandomAttackTest : MonoBehaviour {
public List<int> Atknum = new List<int>();
private List<int> RandomList = new List<int>();
private int Ncount = 0;
// Use this for initialization void Start () { StartCoroutine (randattack()); } // Update is called once per frame void Update () { } private IEnumerator randattack() { while (true) { int i = Random.Range(0, Atknum.Count - 1); //iは0~Atknumの配列数から1引いた数の間のランダムな数字 if (RandomList.Contains(i)) //もしランダムリストの中にiが含まれていた場合は { continue; //もう一回 } Debug.Log(Atknum[i]); //そうでなかったなら選んだAtknumをログ Ncount++; //あらかじめ用意していたらカウントを上げる RandomList.Add(i); //ランダムリストにiを加える if (Ncount >= Atknum.Count) //Ncount が Atknumの数以上になったら { break; //whileをストップ } yield return new WaitForSeconds(1.0f); Debug.Log("おしまい"); } }
}
###試したこと
whileの使い方がわかってなさそうだと思い、
条件とかをわかりやすくして試していて以下のようなものは試したのですが
continueとbreakを両方使って条件を整えていくのがわかりませんでした・・。
private IEnumerator randattack()
{
int i = XCount;
while (true) { if (XCount < 10) { i++; Debug.Log(i); } break; } yield return null; Debug.Log("おしまい"); }
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/26 02:47