Loot & rewards
Weighted drop tables, rarity tiers, multi-item bundles with repeat prevention. Make rewards feel exciting without feeling unfair.
The probability distribution plugin for Unity.
Design weighted probability lists for any type — directly in the Inspector, or from code. Loot drops, enemy spawns, card decks, combat outcomes, dialogue, animations. Controlled randomness that designers and programmers both love to use.
ProbabilityList<T> is a generic container of weighted outcomes that works with any value or reference type — ints, floats, enums, ScriptableObjects, GameObjects, your own classes. Add items, set probabilities visually with the Stripe, and call PickValue(). Done.
But it goes deeper. Variable pick counts, repeat prevention, seeding, pick history, influence providers that shift odds based on game state, depletable lists for finite stock, weights for designer-friendly rarity knobs, burst-compiled selection methods, full extensibility. All of it tunable in the Inspector. All of it controllable from code.
Drop it into a weekend prototype or a production title — RNGNeeds scales with your project. One line to pick a value, a few more to wire up dynamic odds. No setup wizards, no runtime dependencies, no learning curve that fights you.
Author probabilities visually with the Stripe. Drag to rebalance, lock items to preserve ratios, test outcomes in the Inspector, customize themes and color modes per drawer.
Full API for runtime control. Add/remove items, adjust probabilities, configure seeding, implement custom selection methods and influence providers, use PLCollection for grouped tables.
The Inspector
The custom drawer is the heart of RNGNeeds. Every probability list gets a visual Stripe, per-item controls, color themes, and built-in testing — right where Unity developers already work.
AI-Ready
AI coding agents like Codex, Claude Code, and Cursor know Unity — but they don't know RNGNeeds. Without context, they'll write hand-rolled Random.Range solutions that ignore the plugin entirely.
The RNGNeeds agent skill fixes that. Install it once, and your agent understands the plugin's features, terminology, API, and patterns well enough to give you answers that actually use them. Ask for weighted loot drops and get a proper ProbabilityList<T> setup instead of a custom function from scratch.
Use cases
Weighted drop tables, rarity tiers, multi-item bundles with repeat prevention. Make rewards feel exciting without feeling unfair.
Weighted encounter tables with influence providers that react to player progress, location, time, or threat level.
Depletable lists for draw piles. PLCollection for deck building. Pick history for discard tracking. Seeding for replay.
Damage type rolls, crit chance, proc effects, status ailments. Influence providers that shift combat odds based on stats.
Weighted voice lines, NPC behavior decisions, contextual responses. Repeat prevention so the same bark doesn't fire twice.
Storm frequency tied to story progress, resource rarity influenced by region, rare spawns near midnight. Dynamic odds that react to the state of your game world.
Features
Works with any value or reference type. int, float, bool, Vector3, Color, ScriptableObject, MonoBehaviour, GameObject, enums, your own classes. No restrictions.
Visual probability authoring directly in the Inspector. Drag segments to rebalance, scroll to fine-tune, type exact values down to 0.00001%. Lock items to preserve their odds while adjusting others.
Implement IProbabilityInfluenceProvider to dynamically shift odds based on player stats, world state, time of day, audio levels — anything. Each item controls how much influence affects it via its Influence Spread.
Assign units to items and let picks consume them. Depleted items won't be selected. Use for card decks, unique rewards, limited spawns, or any finite stock that refills later.
Three techniques to prevent back-to-back duplicates: Spread (fastest, most biased), Repick (balanced), and Shuffle (best distribution preservation). Choose the right one for the feel you want.
Pick one value or many. Fixed count, random range, or biased range with an adjustable curve. Variable pick counts with linked or independent min/max.
Retain a seed with KeepSeed, set a specific one, or implement a custom ISeedProvider for global control. Reproducible results for replays, debugging, and testing.
Use weights when designers think in relative rarity (1x, 5x, 10x) rather than exact percentages. Weights convert to probabilities automatically.
Group multiple named probability lists into one collection. Pick from a specific list, pick from all, refill individual lists or the whole collection. Ideal for multi-stage loot, biome tables, and deck builders.
Choose burst-compiled variants of selection methods to pick millions of items in milliseconds. Performance is not a concern.
Implement and register custom selection methods via ISelectionMethod. Custom seed providers via ISeedProvider. The plugin is built to be extended, not just configured.
Color themes, monochrome mode, color dimming by probability, info displays, appearance options — all configurable per drawer. RNGNeeds remembers preferences individually.
Code
Set up your lists visually, then use the API when runtime logic needs to take over. Or build everything from code. RNGNeeds doesn't force a workflow.
public class MonsterSpawner : MonoBehaviour
{
public ProbabilityList<Monster> monsterTypes;
public ProbabilityList<int> monsterLevels;
public ProbabilityList<SpawnLocation> spawnLocations;
public void SpawnMonster()
{
var monster = monsterTypes.PickValue();
var level = monsterLevels.PickValue();
var pos = spawnLocations.PickValue().coordinates;
var go = Instantiate(monster.monsterPrefab, pos, Quaternion.identity);
go.GetComponent<MonsterStats>().SetStatsByLevel(level);
}
}
public class PlayerManager : MonoBehaviour, IProbabilityInfluenceProvider
{
public int playerLevel;
public string InfluenceInfo => $"Player level: {playerLevel}";
public float ProbabilityInfluence => ((float)playerLevel).Remap(1, 20, -1f, 1f);
}
public class Card : ScriptableObject, IProbabilityItemColorProvider
{
public CardRarity cardRarity;
public Color ItemColor => cardRarity.rarityColor;
}
public class CardDeck : ScriptableObject
{
public ProbabilityList<CardRarity> cardRarities;
public ProbabilityList<Card> cards;
}
Reviews
This is a dead simple yet powerful RNG solution. In about 10 minutes I had it dropped into my project and had replaced a clunky enemy spawn weight system. This is so much easier to add to, alter weights, and has tons of on-the-fly adjustments you can make. Absolutely excellent.
taboobat
The editor alone is amazing, being able to visualize probabilities and drag them around. It's incredibly intuitive and you can use it right out of the box. I would have spent hours trying to make something like this on my own that wasn't even half as good.
SerketStudios
I got this on sale, and I'd buy it again at full price in a heartbeat. Up there with Odin for essential for me. The team is very responsive and helpful on discord.
stevenairbag
It has already made my project much cleaner by replacing the traditional Random.Range method for randomization. It was very easy for me to learn, and now I want to randomize absolutely everything!
Asset Store reviewer
Best one on the market, it literally has all the use cases I need. Works right out of the box, easy to use.
Tom-Kazansky
Intuitive to work with and fulfills my RNG needs. The UI for the inspector component is well done and customizable.
ItzWatz
Support
Comprehensive guides, tutorials, examples, and a full API reference. Most questions are answered before you need to ask.
docs.rngneeds.comJoin the community. Chat with other users, share ideas, find inspiration, and get help in real time.
Join DiscordStill stuck? Reach out by email. We respond to every inquiry as quickly as possible.
support@starphase.sk
Available on the Unity Asset Store. Compatible with Built-in, URP, and HDRP. Works with all current LTS versions.