Гейміфікація ком’юніті - одна з важливих тем, яка позитивно впливає на гравців. Тому спробую про це розповісти з точки зору розробника та покажу як реалізовані досягнення (або в народі - ачівки) в 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
Топ коментарі (4)
Грав демку вашої гри! Дуже цікава! "Висить" у бажаному, і задум і стилістика перспективні. Не скажу що фанат схожої бойової системи, але сетинг незвичний.
Радий що будуть ачівки) Дуже цікаво дізнатись як працює система колекційних карток з середини і чому не всі ігри їх мають.
Дякую за підтримку. Скоро буде ранній доступ, буде десь 2 години сюжету... Але про це пізнише напишу.
Що до системи колекційних карток, то їх не так просто активувати. Якщо досягнення можна просто заповнити, то для колекційних карток треба отримати доступ для цього. На старті це важко... Як отримаємо цей доступ, то обов'язково про це напишу
Дякую за цікавий допис. Давно було цікаво, як додають досягнення в ігри в Стімі і що для цього треба робити розробникам.
Радий, що вам сподобалось. У мене є багато тем і досвіду для різних подібних статей. Але часу мало... Якщо буде попит, то постараюся написати ще