Страница 1 из 1

Как сделать разблокировку следующего уровня по нажатию на UI

СообщениеДобавлено: 12 июн 2022, 09:58
Simba1395
Здравствуйте, возник вопрос а как сделать разблокировку следующего уровня по кнопке, простая UI кнопка на которой написано завершить задание, и после нажатия происходит разблокировка следующего уровня и переход на главную сцену, я не могу додуматься как это сделать, делаю следующим образом:

Создал отдельную сцену в ней настроил канвас, добавил кнопки уровней, пишу следующий скрипт для того чтобы отслеживать количество кнопок как дочерних элементов, и присваиваю доступным только 1 уровень, все остальное является interactable, данный код:
C#
public static int countUnlockedLevel = 1;
void Start()
{
for (int i = 0; i < transform.childCount; i++)
{
if (i < countUnlockedLevel)
{
#region FirstStateBtn
transform.GetChild(i).GetComponent<Button>().interactable = true;
#endregion
}
else
{
#region SndStateBtn
transform.GetChild(i).GetComponent<Button>().interactable = false;
#endregion
}
}
}
далее пишу скрипт который должен по идее как менять значение countUnlockedLevel, вот данный код:
C#

public void EndQuest()
{
int currentLevel = SceneManager.GetActiveScene().buildIndex;

if(SceneManager.GetActiveScene().buildIndex == ControllerLevel.countUnlockedLevel)
{
ControllerLevel.countUnlockedLevel++;
}
SceneManager.LoadScene(2);
}
но при нажатии на кнопку, происходит только переход на заданную мной сцену, но разблокировка не работает, может кто знает метод, как это сделать, заранее благодарю

Re: Как сделать разблокировку следующего уровня по нажатию на UI

СообщениеДобавлено: 12 июн 2022, 22:15
Alkos26Rus
так у тебя нет сохранения значения countUnlockedLevel, при переходе на следующую сцену это значение опять обнулится

Re: Как сделать разблокировку следующего уровня по нажатию на UI

СообщениеДобавлено: 25 июн 2022, 16:46
Simba1395
Alkos26Rus писал(а):так у тебя нет сохранения значения countUnlockedLevel, при переходе на следующую сцену это значение опять обнулится

А как правильно его добавить, я пытаюсь использовать PlayerPrefs, это правильно? Вот так выглядит сейчас код:
private void Checked()
{
if (PlayerPrefs.HasKey("countLevel"))
{
countUnlockedLevel = PlayerPrefs.GetInt("countLevel");
}
}

void Start()
{

for (int i = 0; i < transform.childCount; i++)
{
if (i < countUnlockedLevel)
{
#region FirstStateBtn
transform.GetChild(i).GetComponent<Button>().interactable = true;
#endregion
}
else
{
#region SndStateBtn
transform.GetChild(i).GetComponent<Button>().interactable = false;
#endregion
}
PlayerPrefs.SetInt("countLevel", countUnlockedLevel);
}

}
}

Re: Как сделать разблокировку следующего уровня по нажатию на UI

СообщениеДобавлено: 25 июн 2022, 21:04
1max1
Как говорится: "Миша, всё х*ня, давай по новой". Загружать значение надо в старте или авейке, до того как ты его будешь использовать, метод Checked вообще не вызывается. А сохранять его нужно там, где оно меняется. Допустим, ты прошел уровень, меняешь значение с 1 до 2, сохраняешь. В другой сцене в старте загружаешь и уже потом его используешь.

Re: Как сделать разблокировку следующего уровня по нажатию на UI

СообщениеДобавлено: 26 июн 2022, 07:40
Simba1395
1max1 писал(а):Как говорится: "Миша, всё х*ня, давай по новой". Загружать значение надо в старте или авейке, до того как ты его будешь использовать, метод Checked вообще не вызывается. А сохранять его нужно там, где оно меняется. Допустим, ты прошел уровень, меняешь значение с 1 до 2, сохраняешь. В другой сцене в старте загружаешь и уже потом его используешь.

Спасибо за подсказку, сохранения заработали, но теперь уровни остаются сохранёнными для всех пользователей, а как можно сделать так чтобы для разных пользователей залогинившихся в игру были свои сохранения, у меня есть базы данных в PHP MyAdmin, мне нужно тоже использовать данную базу чтобы сохранения игры записывались тоже на сервер?