Learn

Documentation

Installing the assets and the first few lines of each one. The full manual for every asset ships inside its own package.

Installation

  1. Open your project in Unity 2022.3 LTS or newer.
  2. Go to Window → Package Manager → My Assets.
  3. Find the asset, then Download and Import.
  4. Keep every file selected. The asset lands in its own top-level folder — for example Assets/SmartStatsSystem/.

Requirements

AssetUnityPackage dependencies
Smart Stats System2022.3 LTS – Unity 6None
Smart Quest System2022.3 LTS – Unity 6TextMeshPro, for the optional UI
Smart Inventory System2022.3 LTS – Unity 6TextMeshPro, for the UI layer
Smart Save System2022.3 LTS – Unity 6TextMeshPro, 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 Runner and 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.