首页 > 解决方案 > 基于列表的任务系统

问题描述

大家好,我正在尝试统一建立一个基于列表的任务系统。除了这里的这段代码之外,一切都在工作:

for (int i = currentPoints; i >= 0; i++)
    {
        if (Quests[i].pointsRequired <= currentPoints)
        {
            Debug.Log("ping"); 
            currentQuestid += 1;
        }
    }

我不太清楚为什么,但任何建议或帮助都会非常感谢!

完整脚本:

公共类 questManager : MonoBehaviour { public int currentQuestid;

[System.Serializable]
public class Quest
{
    public int pointsRequired;
    public GameObject objects;
    public int questID;
    public string objective;
    public string pointName;
    public string info;
    public float waitTime;
    public bool enabled = false;
    public Text objectiveText;
    public Text remainingText;
    public Text infoText;
}

public Quest[] Quests;
public int currentPoints;
public float currentdelay;
public int required;

void Start()
{
    currentQuestid = 0;
    currentPoints = 0;
    

    for (int i = 0; i < Quests.Length; i++)
    {
        Quests[i].objectiveText.text = Quests[i].objective;
    }
}

void Update()
{
    for (int i = 0; i < Quests.Length; i++)
    {
        Quests[i].objects.SetActive(i == currentQuestid);
    }

    for (int i = 0; i < Quests.Length; i++)
    {
        Quests[i].remainingText.text = Quests[i].pointName + ": " + currentPoints + "/" + Quests[i].pointsRequired;
    }

    for (int i = currentPoints; i >= 0; i++)
    {
        if (Quests[i].pointsRequired <= currentPoints)
        {
            Debug.Log("ping"); 
            currentQuestid += 1;
        }
    }


}`

标签: c#unity3d

解决方案


for循环中的简单错字:

for (int i = currentPoints; i >= 0; --i)
{
    //Be safe
    if (Quests.Length <= i)
        continue;
    if (Quests[i].pointsRequired <= currentPoints)
    {
        Debug.Log("ping"); 
        currentQuestid += 1;
    }
}

具体来说,您要递减i,而不是递增。


推荐阅读