Documentation
Installing the assets and the first few lines of each one. The full manual for every asset ships inside its own package.
Installation
- Open your project in Unity 2022.3 LTS or newer.
- Go to
Window → Package Manager → My Assets. - Find the asset, then Download and Import.
- Keep every file selected. The asset lands in its own top-level folder — for example
Assets/SmartStatsSystem/.
Requirements
| Asset | Unity | Package dependencies |
|---|---|---|
| Smart Stats System | 2022.3 LTS – Unity 6 | None |
| Smart Quest System | 2022.3 LTS – Unity 6 | TextMeshPro, for the optional UI |
| Smart Inventory System | 2022.3 LTS – Unity 6 | TextMeshPro, for the UI layer |
| Smart Save System | 2022.3 LTS – Unity 6 | TextMeshPro, for the optional slot menu |
TextMeshPro is part of Unity 6. On Unity 2022.3 it is a separate Package Manager package that is included in every standard project template — if your project does not have it, install com.unity.textmeshpro and import its Essential Resources.
Every asset works on Built-in, URP and HDRP: none of them contain shaders, materials or any rendering assets.
Smart Stats System
Add a StatsComponent to a character, then define stats and read them back with their reasoning.
var stats = GetComponent<StatsComponent>();
stats.Add("Attack", 20f);
stats.Get("Attack").AddModifier(StatModifier.Flat(10f, "Iron Sword"));
stats.Get("Attack").AddModifier(StatModifier.PercentAdd(0.5f, "Rage"));
float value = stats.Get("Attack").Value; // 45
// Why 45? Ask, and every stage answers.
StatBreakdown how = stats.Get("Attack").GetBreakdown();
Derived stats stay up to date on their own, and a formula that would create a cycle is refused when you register it, with the loop named:
stats.AddDerived("Max Health", StatFormula.From("Constitution").Times(10f));
Smart Quest System
Drop a QuestRunner into the scene. Nothing is static, so a co-op game can run one per player.
var quests = GetComponent<QuestRunner>();
quests.Start("wolf-trouble");
// Report progress from anywhere in your game.
quests.Report("kill", subject: "wolf", amount: 1);
// A locked quest tells you why, instead of just refusing.
var verdict = quests.CanStart("the-pilgrimage");
Smart Inventory System
Define items as ScriptableObjects, then drive an InventoryComponent. Every operation returns a result you can act on rather than a bare bool.
var bag = GetComponent<InventoryComponent>();
OperationResult result = bag.Add("iron-sword", quantity: 1);
if (!result.Success)
Debug.Log(result.Error); // InventoryFull, WeightExceeded, ...
bag.Changed += () => RefreshHud();
Smart Save System
Two ways to save. Use whichever fits the code you already have.
// 1) Key and value.
SmartSave.Set("coins", 100);
SmartSave.Save();
int coins = SmartSave.Get<int>("coins");
// 2) Mark fields and add a SaveableEntity to the object.
public class PlayerStats : MonoBehaviour
{
[SmartSave] public int coins;
[SmartSave] public float health;
}
SmartSave.Load();
There is no manager prefab to place and no setup step: with no settings asset present, sensible defaults are built in memory. Before you ship, set your own encryption password in the Smart Save settings — the system warns you once per session if you are still on the one the asset ships with, because that one is public.
Inside each package
- A Documentation folder with the full manual, API reference and changelog as Markdown you can read in the editor or on GitHub.
- A demo scene showing the asset working end to end.
- The test suite — 743 tests across the line. Open
Window → General → Test Runnerand run them yourself; the claims on this site are the ones those tests assert.
Something missing or unclear? Contact support — replies typically within 48 hours.