Куток

Обкладинка для допису Steam Achievements на прикладі Erra: Exordium
Alien 👽 Max
Alien 👽 Max

Додано

Steam Achievements на прикладі Erra: Exordium

Гейміфікація ком’юніті - одна з важливих тем, яка позитивно впливає на гравців. Тому спробую про це розповісти з точки зору розробника та покажу як реалізовані досягнення (або в народі - ачівки) в Erra: Exordium

Опис картинки

Для Steam вам треба підготувати 2 картинки на кожне досягнення: відкрите та ще невідкрите досягнення. Досягнення має назву та опис. Ось так виглядає форма для створення досягнень в Steam

Опис картинки

Який баланс досягнень робити

Це залежить від жанру гри. В Erra: Exordium ми вирішили поділити це на 3 групи та розподілити їх приблизно порівну:

  • сюжетні досягнення
  • досягнення пов’язані з лічильниками дій гравця
  • та інші

Сюжетні досягнення відкриваються по мірі проходження гравця сюжета та ознайомлення з основними правилами гри: знайти артефакт, взаємодіяти зі спогадом, завершити локацію тощо

Лічильники - все що можна класифікувати як дія гравця та рахувати це на протязі сесії гри. Наприклад, кількість вбитих ворогів за допомогою елементів середовища, блокування атак, знайдених записок тощо

Опис картинки

Інші досягнення можна класифікувати або як ситуативні або не необов’язкові по сюжету. Наприклад, вбити ворога за допомогою елемента середовища, який треба активувати зброєю в незручний для гравця момент. Або знайти якийсь предмет, який знаходиться в таємному місці і не є головним сюжетним

Опис картинки

Опис картинки

Планування

Про це дуже коротко… Плануйте досягнення наприкінці розробки гри. Інтегрувати це в код не займе багато часу. А якщо у вас досягнення будуть тільки як подія об’єкта на сцені або тригер, то це ще простіше, в такому випадку, вам треба тільки розкидати об’єкти досягнень по локаціям.

Опис картинки

Під капотом

Все що треба рахувати, можна зробити в тому числі використовуючи Steam Stats. Але це потребує написати код для взаємодії з API Steam Stats. Наприклад, гравець знищив ворога, ви додали до лічильника Steam Stats +1. Якщо у вас є досягнення на кількість знищених ворогів, то ви перевіряєте кількість лічильника в Steam Stats та активуєте пов’язане з цим досягнення.

Або рахувати це локально. Я обрам саме цей варіант. Хоча в Steam Stats нема нічого складного. Просто я робив все послідовно, без використання Steam API.

В моєму випадку, досягнення - це сутність, яка може мати лічильник або бути пов’язана з обробкою унікальних випадків, які в свою чергу прописані в різних частинах коду різних об’єктів.

Для локацій створений об’єкт досягнення, його може визвати любий інший об’єкт. Наприклад, відчинивши двері, дверь може дати команду різним об’єктам (активувати ворога, увімкнути світло, тощо) в тому числі досягненню. Або підняти якийсь предмет сцени. Отримавши команду, об’єкт дає команду підсистемі досягнень, де відбувається різні події. В моєму випадку, головний в підсистемі досягнень - це Achievement Manager.

Опис картинки

Achievement Manager завантажує дані та створює для них набір досягнень. Потім він завантажує інформацію з збереження гравця, та надає цю інформацію досягненням.
Налаштування досягнення має декілька основних параметрів.

Id та Id Platform - це ідентифікатори всередині системи та в зовнішньої системи (Steam).
Counter - це вид лічильників, який задіяний в різних частинах коду інших об’єктах.
Require - необхідна кількість, щоб активувати досягнення.
Use Session - це маркер, завдяки якому система досягнень буде контролювати чи рахувати в проміжку сесії гравця, поки гравець не дійде до точки збереження, зароблені бали не будуть враховуватись, якщо гравець вийде з гри. Мені це здалось логічним, щоб гравець не міг, наприклад, в одній локації активувати більшість досягнень, перезавантажуючи локацію, або помираючі та на протязі короткого шляху виносити те, що пов’язано з досягненням

Система досягнень зроблена таким чином, щоб можна було тестувати її локально, або переключати на логіку зовнішніх систем досягнень (Steam, Nintendo Switch, Playstation, Xbox)

Опис картинки

Що треба для тестування Steam Achievements

Розділіть процес на два етапи. Перший - тестування системи на базі гри Spacewar. Другий - тестування системи безпосередньо вашого проекта

Для першого етапу не треба мати зареєстровану гру, а достатньо мати звичайний акаунт в Steam. Візьміть до уваги, що деякі приклади роботи з Steam API та Achievements які ви знайдете в інтернеті, можуть не працювати з деякими досягненнями (в мене так було), тому що було вказано невірний ідентифікатор досягнення. Тому шукайте справжні ідентифікатори досягнення тут https://steamdb.info/app/480/stats/

Приклади та інформація для роботи в Unity

Нажаль в Unity немає офіційного рішення, який працює з Steam API. Я обрав Steamworks NET. Після встановлення - почніть копатись в цьому https://github.com/rlabrecque


Erra: Exordium в Steam
Twitter гри
Discord гри
Мій twitter

Топ коментарі (4)

Звернути
 
alfred_faust_dcf348b1f763 profile image
Alfred Faust

Грав демку вашої гри! Дуже цікава! "Висить" у бажаному, і задум і стилістика перспективні. Не скажу що фанат схожої бойової системи, але сетинг незвичний.

Радий що будуть ачівки) Дуже цікаво дізнатись як працює система колекційних карток з середини і чому не всі ігри їх мають.

Звернути
 
prybulets profile image
Alien 👽 Max

Дякую за підтримку. Скоро буде ранній доступ, буде десь 2 години сюжету... Але про це пізнише напишу.

Що до системи колекційних карток, то їх не так просто активувати. Якщо досягнення можна просто заповнити, то для колекційних карток треба отримати доступ для цього. На старті це важко... Як отримаємо цей доступ, то обов'язково про це напишу

Опис картинки

Звернути
 
darkprince9507_8f14f7da50 profile image
Дарк Валерійович

Дякую за цікавий допис. Давно було цікаво, як додають досягнення в ігри в Стімі і що для цього треба робити розробникам.

Звернути
 
prybulets profile image
Alien 👽 Max

Радий, що вам сподобалось. У мене є багато тем і досвіду для різних подібних статей. Але часу мало... Якщо буде попит, то постараюся написати ще

Куток

Підписуйтеся на наші соціальні мережі:
Telegram
Twitter
Facebook


Тепер у нас також є Youtube канал!