Как сделать разблокировку уровней и подсветку уже пройденных. Unity

Пытаюсь сделать хоть что то похожее на игру и хочу сделать несколько уровней.

В этом меню можно выбрать уровень.

введите сюда описание изображения

Я хочу чтобы до прохождения первого уровня нельзя было попасть на второй, а также подсветку кнопки выбора уровня другим цветом, если он уже был пройден.

Как это можно сделать?


Ответы (3 шт):

Автор решения: Cmer4

Создайте статичную переменную:

public static int MaxFinishedLevel = 0

после прохождения каждого уровня проверяйте:

if (thisLevel > MaxFinishedLevel) {
    MaxFinishedLevel = thisLevel
}

тем самым в переменной будет храниться самый больший пройденный уровень. А затем в меню при создании кнопки вы просто проверяете текст кнопки, и если он меньше наибольшего пройденного уровня, ставьте ее серой, а иначе - зеленой:

x = Instantiate(Prefab, position, rotation)
if (x >= MaxFinishedLevel) {
    x.GetComponent<Renderer>().mayerial.color = Color.green
}
→ Ссылка
Автор решения: Максю Гузеевгений

Для другого цвета можешь просто создать другой спрайт или перекрасить этот, а при открытии этого меню каждый раз проверять какие уровни доступны, а какие нет. На доступный пусть ставится эта текстурка, а на закрытый - другая. Я говорю как, конкретно можно посмотреть "в интернетах".

Для запрета на открытие недоступных уровней ничего сложного не нужно. Создайте переменную количества открытых уровней и при попытке открытия оного проверяйте, меньше ли число нужного или нет. В общем:

В коде действия при нажатии проверяем, меньше или равно (<= в C#, Python и большинстве других языков) это число, чем число уровня. True - открываем уровень, False - не открываем.

→ Ссылка
Автор решения: qp9 db6

На сцену разместите замки(закрыто), а в старте делайте их неактивными. Сохраняйте с помощью класса PlayerPrefs.

Например, при прохождении уровня сохраняйте:

PlayerPrefs.SetInt("level", PlayerPrefs.GetInt("level", 0) + 1);

А при заходе в меню(Start()):

int level = PlayerPrefs.GetInt("level", 0);
for(int i = 0; i < level; i++){
     //делайте что-нибудь с массивом спрайтов
}
→ Ссылка