Пытаюсь сделать так, чтобы в конце уровня все достижения, значения которых были изменены, выводились на экран. Так я сохраняю информацию о достижениях, которые были получены:
// вот эти ачивки будут создаваться в меню выигрыша. Функция вызывается при получении ачивки (ПЕРЕД изменением значения)
public void LoadAchievementStartInfo(string title, int startAchievementValue, int startCounterAchievement, int ranking)
{
if (!achievementsChange.Contains (title))
{
achievementsChange.Add (title); // тут List<string>
PlayerPrefs.SetInt ("StartAchievementValue" + title, startAchievementValue);
PlayerPrefs.SetInt ("StartCounterAchievement" + title, startCounterAchievement);
PlayerPrefs.SetInt ("Ranking" + title, ranking);
}
}
Суть в том, что я для каждой ачивки сохраняю ее имя (title
), "начальное значение до ее получения", еще одно "начальное значение" (для вопроса оно не важно, просто не стал строку удалять), а так же сохраняю ее позицию (ranking
) - ее я хочу использовать для сортировки. Эта функция вызывается в PlayScene
(соответственно, achievementsChange
тоже находится там), а экран выигрыша - уже другая сцена.
И вот тут я начинаю дико тупить - как мне вывести на экран все ачивки, которые я таким образом сохранил?
Вообще для создания ачивки у меня есть функция CreateAchievement (title, ну и всякие параметры)
, и вот как-то нужно создать все ачивки, которые были изменены, используя эту функцию (вернее, поместить информацию о достижениях в эту функцию).
Как-то так (просто чтобы пояснить идею):
for (int i = 0; i < achievementsChange.count (как её получить?); i ++)
CreateAchievement(achievementChange[i], PlayerPref.GetInt("StartCounterAchievement" + achievementChange[i]), таким же образом остальные параметры);
Но ещё раз - я дико туплю, так как, возможно, только что написал решение 0_о
Вопрос несколько изменился: как мне перенести achievementChange
(напомню, это List<string>
) с имеющимися значениями из одной сцены в другую? Технически мне все ещё нужно получить ответ на тему вопроса, так что вроде нарушения правил нет.
Обновление: Возможно, я не совсем корректно сформулировал вопрос. Достижения уже реализованы и они прекрасно работают. Мне для сцены выигрыша нужно отловить те достижения, которые были изменены (все достижения, которые были получены в процессе игры, а так же все достижения, значения которых были изменены - например, для одной ачивки прогресс 0/3, а в процессе игры я делаю 2/3; вот такие тоже нужно отлавливать), а затем вывести их на экран
Абсолютное большинство игр грешат использованием статичных классов и/или синглтонов
В Unity есть свои подводные камни. Поэтому реализация одиночки, зачастую, включает в себя вызов метода DontDestroyOnLoad
. Подробнее можешь прочитать здесь
В любом случае, передавать List<string>
- это плохая идея. Затем тебе понадобится отобразить прогресс достижения. И появится ещё один List<int>
. Создай класс, описывающий достижение, помести его в глобальную коллекцию ачивок (Dictionary<id,AchievementData>
), доступную из любой сцены. В качестве id
можешь и дальше использовать string, или перейти на числа/GUID. Строки опасны тем, что имеют обыкновение по самым разным причинам меняться (рефакторинг, локализация), после чего перестают совпадать. Зачем эта головная боль?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Читая про ReversMap() у AutoMapper, не могу понять разницу между методами ForMember и ForPathТот функционал, который выполняет ForPath на данной странице я обычно...
Доброго времени сутокМне требуется не большая помощь со стороны разработчиков C# или JS
Посоветуйте сайты в интернете, где можно выполнять небольшие проекты по программированию, возможно бесплатно, которыми не стыдно потом будет...
Упрощу реальную задачу для примера - есть вьюшка окна, в окне есть несколько кнопок и условная панельПо нажатию на каждую кнопку в панели...