Всех приветствую! Сегодня я хочу немного рассказать о том, как я писал свою систему достижений. А гуру могли бы дать совет, хороший ли мой
способ или нет.
Итак, достижения я реализовывал через ScriptableObject. Почему я выбрал этот способ?
  • Гибкость
  • Удобство
Сама структура достижения выглядит так:
В данном случае, обращение к достижениям идёт через id элемент, так как название достижения (по крайней мере у меня) может быть длинным
и через него обращаться было бы крайне сложно.
progressCompleted - это переменная, отвечающая за прогресс достижения, так как существуют достижения, которые выполняются по мере
выполнение чего-либо. Например игроку необходимо прыгнуть 20 раз, тогда мы при каждом прыжке обращаемся к нужному достижению
и прибавляем некоторое значение. Его можно посчитать через простецкую пропорцию (20 - 100%, 1 - x%, где 20 - это ваше произвольное кол-во), ваш капитан.
Собственно если достижение должны получать сразу, то просто (+= 100) к переменной.
А так происходит обращение к достижению
Данный метод не совсем точен, так как это моя вариация, по-хорошему он должен выглядеть так:
public void GetAchievement(string id, byte count)
{
Achievement getAchievement = achievementList.achievementList.Find(idAchievement => idAchievement.id.Contains(id));

if(getAchievement.progressCompleted != 100)
		getAchievement.progressCompleted += countComplete;
		else CompleteAchievement(getAchievement.name, getAchievement.icon);
}
Где CompleteAchievement() - метод, отвечающий за получение достижения и вывод его на экран
Удобство и гибкость в том, что все достижения можно легко добавить/удалить/изменить вот в таком файлике
А для сохранение полученных достижений, необходимо просто сохранять параметр progressCompleted через цикл. А далее в скрипте
делать проверку на то, равно ли значение достижения 100 или нет, также через цикл.
Вот и всё. Лично я записываю все игровые данные в JSON, поэтому у меня нет сложности записывать все данные по достижениям.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
15
7 лет назад
1
2-я картинка битая
А так вполне познавательно выглядит, даже я вполне поняла =D
0
13
7 лет назад
0
Мышкоблудка, Исправил, спасибо за отзыв :)
0
18
7 лет назад
0
Как всегда полезно, делаю заметки для себя (пока оформляю диздок одной своей штукенции)
0
13
7 лет назад
0
BrEd Pitt, Что за штукенция?)
0
18
7 лет назад
0
рогалик
0
13
7 лет назад
0
BrEd Pitt, А где нибудь можно узнать о твоём проекте?
0
18
7 лет назад
0
пока что нет. Я только начал утверждаться с концепцией, да и учеба будет отнимать достаточно времени, поэтому разработка будет идти очень медленно. Как пример приведу лишь то, что саму идею оформлял около года, "работая напильником" и учитывая возможные недостатки.
я ж очень педантичный и дотошливый
2
24
7 лет назад
Отредактирован prog
2
DasBro,
А как же локализуемый описательный текст достижения, неужели одного названия достаточно?
Ну и хранение прогресса в процентах в целочисленной переменной приведет к сбоям если инкремент будет больше одной сотой от максимума.
ИМХО, я бы вобще напроч разделил описательную часть и реализацию подсчета результатов - глобальная библиотека со всеми доступными достижениями отдельно, подсчет прогресса по каждому из них отдельно.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.