Как добавить стим ачивки (достижения) в свою игру
При разработке своей игры у меня даже вопрос не стоял — делать ли достижения в ней или нет. Конечно же, делать! Любой разработчик, уважающий себя и, главное, покупателей своей игры, который хочет, чтобы игра была им интересна, обязательно должен внедрить такую функцию. И вот, когда моя игра уже готова к выходу в свет, я занялся добавлением функции получения достижений.
Установка необходимого пакета
Заходим на сайт с инструкциями для разных движков.
Выбираем «Installation» и переходим по ссылке Release на страницу Гитхаба с последними релизами
и скачиваем к себе в компьютер.
В своём проекте через меню Assets устанавливаем данный пакет:

Импортируем пакет со всеми галками:
Настройка установленного пакета
В своём проекте на папке Assets жмём правой кнопкой мыши и выбираем «Show in Explorer».
В проводнике откроется наш проект. Здесь появился новый текстовый файл
в котором указываем свой айди игры (вместо вписанного по умолчанию 480)
Это общедоступная информация которую можно узнать или в стимворксе
или на странице игры в стим магазине
После всех этих действий нужно перезапустить свой юнити проект.
Проверка установки и настройки пакета
Теперь на главной сцене начала игры создаём объект (GameObject). Для удобства назовём его SteamManager
И добавляем на него такой же компонент
Получаем
Сам скрипт СтимМенеджера находится тут — можно ознакомиться с его работой
Проверяем правильность проделанной работы. Создаём новый GameObject — назовём «Steam Scripts».
Создаём здесь же новый скрипт «SteamScript»
и вешаем его на этот объект.
Пишем такой скрипт
Запускаем игру в своём реакторе и видим сообщение внизу в логах
Соответственно и в стим-клиенте вы будете онлайн в данной игре. Это означает, что всё сделано правильно. Статус инициализации в стиме проверен. Кстати, у меня было False. При проверке с айди кодом игры 480 оказалось True. Потом дошло, что я был в другом аккаунте стим. Перезашёл в аккаунт разработчика игры и всё супер!
Но тут есть один странный нюанс. Если мы остановим свою игру, то по-прежнему будет отображаться, что мы в игре. Нужно или перегрузить сам стим-клиент или перезайти в юнити.
Если в логах другое сообщение (False), то проверьте с айди кодом игры, который был по умолчанию 480. Это стим игра Space war от Valve, которая у всех есть по умолчанию. Если даже с этим не работает, то, значит, сделано что-то неправильно. Проделайте всё описанное выше заново.
На этом подготовка и проверка закончена.
Создание своих достижений в Steam
Создаём новый GameObject — назовём «Steam Achievements».
И скрипт «SteamAchievements»
Перетаскиваем скрипт на объект
В управлении приложением выбираем пункт «Достижения»
И добавляем новые в свой список (тут всё предельно понятно)
Не забываем для всех нужных языков проделать то же самое.
В основной информации о приложении в блоке «Поддерживаемые функции» ставим галку напротив достижений
Не забывайте при каждом внесении любых изменений публиковать их
Внедрение достижений в Steam в свою игру на Unity
Сам код выглядит так. Думаю, со встроенными комментариями всё будет понятно. Очистку ачивки я закомментировал.
Переменные я вводил для вывода информации в логах при тестировании. То есть, и дебаги так же не нужны, разумеется. По сути, основное — это команда для активации достижения achName
SteamUserStats.SetAchievement(achName);
и передача этих данных в стим
SteamUserStats.StoreStats();
Если после проделанных действий что-то не получается, проверьте все названия ачивок с которыми вы собираетесь работать. Или, как было у меня по непонятной мне причине, попробуйте просто перезайти в стим и свой проект игры. Так как у меня на следующий день всё заработало.



























