У меня проблемы с этим кодом, я получаю ошибку IndexOutOfRange каждый раз, когда игрок нажимает на maxLevel. После нажатия на maxLevel currentEXP будет сброшен до 0, только после повторного нажатия клавиши «K».
Может быть, я пропускаю еще один оператор if. Может быть, в то время как-l oop? Заканчивать время-l oop? В каком состоянии это будет?
// Start is called before the first frame update
void Start()
{
expToNextLevel = new int[maxLevel];
expToNextLevel[1] = baseEXP;
for (int i = 2; i < expToNextLevel.Length; i++)
{
expToNextLevel[i] = Mathf.FloorToInt(expToNextLevel[i - 1] * 1.3f);
}
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.K))
{
AddExp(100);
}
}
//Adds EXP and levels up the character
public void AddExp(int expToAdd)
{
currentEXP += expToAdd;
//performs functions as long as playerLevel doesn't exceed maxLevel
if (playerLevel < maxLevel)
{
//level up to the equivalent level with all the exp gain up to that level
while (currentEXP > expToNextLevel[playerLevel])
{
currentEXP -= expToNextLevel[playerLevel];
playerLevel++;
}
} else {
currentEXP = 0;
}
}