Как вывести на экран достижения, которые были получены?

372
07 августа 2017, 09:35

Пытаюсь сделать так, чтобы в конце уровня все достижения, значения которых были изменены, выводились на экран. Так я сохраняю информацию о достижениях, которые были получены:

// вот эти ачивки будут создаваться в меню выигрыша. Функция вызывается при получении ачивки (ПЕРЕД изменением значения)
    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; вот такие тоже нужно отлавливать), а затем вывести их на экран

Answer 1

Абсолютное большинство игр грешат использованием статичных классов и/или синглтонов В Unity есть свои подводные камни. Поэтому реализация одиночки, зачастую, включает в себя вызов метода DontDestroyOnLoad. Подробнее можешь прочитать здесь

В любом случае, передавать List<string> - это плохая идея. Затем тебе понадобится отобразить прогресс достижения. И появится ещё один List<int>. Создай класс, описывающий достижение, помести его в глобальную коллекцию ачивок (Dictionary<id,AchievementData>), доступную из любой сцены. В качестве id можешь и дальше использовать string, или перейти на числа/GUID. Строки опасны тем, что имеют обыкновение по самым разным причинам меняться (рефакторинг, локализация), после чего перестают совпадать. Зачем эта головная боль?

READ ALSO
В чем разница между ForMember() и ForPath() методов AutoMapper?

В чем разница между ForMember() и ForPath() методов AutoMapper?

Читая про ReversMap() у AutoMapper, не могу понять разницу между методами ForMember и ForPathТот функционал, который выполняет ForPath на данной странице я обычно...

418
Требуется помощь! [требует правки]

Требуется помощь! [требует правки]

Доброго времени сутокМне требуется не большая помощь со стороны разработчиков C# или JS

294
Проекты (портфолио) [требует правки]

Проекты (портфолио) [требует правки]

Посоветуйте сайты в интернете, где можно выполнять небольшие проекты по программированию, возможно бесплатно, которыми не стыдно потом будет...

312
WPF+MVVM, как организовать архитектуру окна?

WPF+MVVM, как организовать архитектуру окна?

Упрощу реальную задачу для примера - есть вьюшка окна, в окне есть несколько кнопок и условная панельПо нажатию на каждую кнопку в панели...

345