Achivki
Полезное

Как добавить стим ачивки (достижения) в свою игру

При разработке своей игры у меня даже вопрос не стоял — делать ли достижения в ней или нет. Конечно же, делать! Любой разработчик, уважающий себя и, главное, покупателей своей игры, который хочет, чтобы игра была им интересна, обязательно должен внедрить такую функцию. И вот, когда моя игра уже готова к выходу в свет, я занялся добавлением функции получения достижений.

Установка необходимого пакета

Заходим на сайт с инструкциями для разных движков.

Achievments01

Выбираем «Installation» и переходим по ссылке Release на страницу Гитхаба с последними релизами

Achievments02

и скачиваем к себе в компьютер.

В своём проекте через меню Assets устанавливаем данный пакет:

Achievments03Achievments04Импортируем пакет со всеми галками:

Achievments05

Настройка установленного пакета

В своём проекте на папке Assets жмём правой кнопкой мыши и выбираем «Show in Explorer».

Achievments06

В проводнике откроется наш проект. Здесь появился новый текстовый файл

Achievments07в котором указываем свой айди игры (вместо вписанного по умолчанию 480)

Achievments08Это общедоступная информация которую можно узнать или в стимворксе

Achievments09

или на странице игры в стим магазине

Achievments10

После всех этих действий нужно перезапустить свой юнити проект.

Проверка установки и настройки пакета

Теперь на главной сцене начала игры создаём объект (GameObject). Для удобства назовём его SteamManager

Achievments11

И добавляем на него такой же компонент

Achievments12

Получаем

Achievments13

Сам скрипт СтимМенеджера находится тут — можно ознакомиться с его работой

Achievments14

Проверяем правильность проделанной работы. Создаём новый GameObject — назовём «Steam Scripts».

Achievments15

Создаём здесь же новый скрипт «SteamScript»

Achievments16

и вешаем его на этот объект.

Achievments17

Пишем такой скрипт

Achievments18

Запускаем игру в своём реакторе и видим сообщение внизу в логах

Achievments19

Соответственно и в стим-клиенте вы будете онлайн в данной игре. Это означает, что всё сделано правильно. Статус инициализации в стиме проверен. Кстати, у меня было False. При проверке с айди кодом игры 480 оказалось True. Потом дошло, что я был в другом аккаунте стим. Перезашёл в аккаунт разработчика игры и всё супер!

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

Если в логах другое сообщение (False), то проверьте с айди кодом игры, который был по умолчанию 480. Это стим игра Space war от Valve, которая у всех есть по умолчанию. Если даже с этим не работает, то, значит, сделано что-то неправильно. Проделайте всё описанное выше заново.

На этом подготовка и проверка закончена.

Создание своих достижений в Steam

Создаём новый GameObject — назовём «Steam Achievements».

Achievements20

И скрипт «SteamAchievements»

Achievements21

Перетаскиваем скрипт на объект

Achievements22

В управлении приложением выбираем пункт «Достижения»

Achievements24

И добавляем новые в свой список (тут всё предельно понятно)

Achievements25

Не забываем для всех нужных языков проделать то же самое.

В основной информации о приложении в блоке «Поддерживаемые функции» ставим галку напротив достижений

Achievements27

Не забывайте при каждом внесении любых изменений публиковать их

Achievements28

Внедрение достижений в Steam в свою игру на Unity

Сам код выглядит так. Думаю, со встроенными комментариями всё будет понятно. Очистку ачивки я закомментировал.

Achievements23

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

SteamUserStats.SetAchievement(achName);

и передача этих данных в стим

SteamUserStats.StoreStats();

Achievements30

Achievements29

Если после проделанных действий что-то не получается, проверьте все названия ачивок с которыми вы собираетесь работать. Или, как было у меня по непонятной мне причине, попробуйте просто перезайти в стим и свой проект игры. Так как у меня на следующий день всё заработало.