我正在为Unity2D中的游戏制作一个任务系统。我将所有不同类型的任务存储在字典中,但只有5个任务可以随机为玩家挑选。我首先使用嵌套循环来获取5个随机数,然后使用另一个foreach循环来访问字典中的元素,最后计划使用另一个for循环来打印所有已挑选的任务。但是,我遇到了问题,因为它打印了25次而不是5次。有没有办法打破第二个循环并进入第三个循环?谢谢!
void Start()
{
// missions
missions.Add("Visit Mural Stops x ", 1);
missions.Add("Collect Cards x ", 2);
missions.Add("Fight Monsters x", 3);
missions.Add("Collect Coins x ", 4);
missions.Add("Collect Items x", 5);
missions.Add("Fight SBM Boss x ", 6);
missions.Add("Find Mural Stops x", 7);
var numbers = new List<int>(missions.Count);
for (int i = 0; i < missions.Count; i++)
{
numbers.Add(i);
}
var randomNumbers = new int[text.Length];
// text.Length is always 5, as I only have 5 mission texts
for (int i = 0; i < randomNumbers.Length; i++)
{
var thisNumber = Random.Range(1, numbers.Count);
randomNumbers[i] = numbers[thisNumber];
numbers.RemoveAt(thisNumber);
//Debug.Log("random " + randomNumbers[i]);
foreach (KeyValuePair<string, int> pairs in missions)
{
if (pairs.Value == randomNumbers[i])
{
//Debug.Log(pairs.Key); // print out 5 missions
missionText = pairs.Key;
for (int j = 0; j < text.Length; j++)
{
text[j].text = missionText; // it only print out the last picked quests
Debug.Log(missionText); // each picked quest is printed out 5 times instead of once
// how do i print out only 5 times inside this loop?
}
}
}
}
}
答案 0 :(得分:0)
你的问题是你的最后一个循环:
for (int j = 0; j < text.Length; j++)
{
text[j].text = missionText;
Debug.Log(missionText);
}
这运行Debug.Log
五次 - 每次j的值一次(你之前说text.Length
总是5)。
在评论中,您说要将所有已挑选的任务打印到我的文本中。
您已经有一个文字索引 - i
- 因为您的randomNumbers
数组与文本的长度相同,实际上randomNumbers
的整点似乎是生成一个text
的每个条目的随机数。因此,而不是那个循环,我引用你想要做的是:
text[i].text = missionText;