Create and manage achievements through an in-engine editor and display them in your game!
This plugin is still in beta and may contain bugs or incomplete features. Please report any issues you encounter on the GitHub repository.
- Easily create and manage achievements with an in-engine editor
- Customize the look, behavior, and visibility of each achievement
- Display achievements in-game using a simple API
- Track player progress, completion, and rare achievements
- Seamless integration into existing Godot projects
- Lightweight and optimized for performance
To install Milestone, follow these steps:
- Make sure you have Godot 4.4 or later installed (i didn't test older versions, but i'm using UIDs which weren't really used in 4.3).
- Download the latest release from the releases page.
- Extract the
addonsfolder from the downloaded ZIP file into your root project directory. Should look like this:my_game/ βββ addons/ β βββ milestone/ β βββ autoload/ β βββ components/ β βββ scripts/ β βββ ... βββ project.godot βββ ... - Open your Godot project and navigate to the
Project β Project Settings β Plugins. - Enable the Milestone plugin by checking the box next to it.
- You will see a new
Milestonetab at the top in the editor. Click on it to open the Milestone manager. Have fun!
- Open the Milestone manager by clicking on the
Milestonetab in the editor. - Modify the plugin settings in the
Settingstab to your liking. - Create and manage your achievements in the
Achievementstab. - Create a new
AchievementNotifiernode in your scene to allow for displaying achievements in-game. - Modify
AchievementNotifierproperties to change the behavior of the notifications, their position and the notification component. - Use the
AchievementManagerAPI to track player progress and completion of achievements.
The AchievementManager API provides a simple way to manage and track achievements in your game. You can use the following methods to interact with achievements:
| Method | Description |
|---|---|
AchievementManager.unlock_achievement(achievement_id: String) |
Unlocks the achievement with the given ID. |
AchievementManager.is_unlocked(achievement_id: String) |
Returns true if the achievement is unlocked. |
AchievementManager.progress_achievement(achievement_id: String, progress_amount: int) |
Progresses the achievement with the given ID using the specified progress amount. |
AchievementManager.progress_group(group_id: String, progress_amount: int) |
[since 1.1.0] Progresses all achievements in the group using the specified progress amount. |
AchievementManager.get_progress(achievement_id: String) |
Returns the progress of the achievement. |
AchievementManager.get_achievements_by_group(group_id: String) |
[since 1.1.0] Returns a list of achievements in the group. |
AchievementManager.reset_achievements() |
Resets all achievements. |
AchievementManager.reset_achievement(achievement_id: String) |
Resets the achievement with the given ID. |
AchievementManager.unlock_all_achievements() |
Unlocks all achievements. |
There are also these signals on the AchievementManager class:
| Signal | Arguments | Description |
|---|---|---|
achievement_unlocked |
achievement_id: String |
Emitted when an achievement is unlocked either directly or through progress. |
achievement_progressed |
achievement_id: String, progress_amount: int |
Emitted when an achievement is progressed. |
achievement_reset |
achievement_id: String |
Emitted when an achievement is reset. |
achievements_reset |
Emitted when reset_achievements() is called. | |
achievements_loaded |
Emitted when achievements have finished loading from file. |
This project is licensed under the MIT License.