top of page

# Unity Random Number With Decreasing Probability Creating a C# number generator method that basically works like Random.Range() in Unity Engine with the possibility of assigning a weight to skew the ending result in either direction is an extremely useful tool in game development when creating different looting and/or scoring systems.

Feel free to copy the method below and make sure to see the different examples of usage with visual graphs.

## Skewed Random Range:

```float SkewedRandomRange(float min, float max, float weight)
{
float rnd = Mathf.Pow(Random.value, weight);
float index = (min + rnd * (max - min + 1));
return Mathf.Clamp(index, min, max);
}```

## Usage:

`SkewedRandomRange(min, max, weight);`

min - Smallest possible number.

max - Largest possible number.

weight - Skewing of the result.

- If weight is 1, the method will not skew the result.

- If weight is above 1, it will skew the result with an increasing probability towards the min value.

- If weight is anything between 0 and 1, it will skew the result with an increasing probability towards the max value.

IMPORTANT NOTE:

Most of you probably will be best off using anything below 0.5f as a weight to achieve the most predictable type of slope as it doesn't weigh the starting value so heavily. See the examples below.

## Results:

These graphs will show you how using different weights will affect the ending result. All of the following tests were executed a million times within the range of (1, 10).

`SkewedRandomRange(1, 10, 0.5f);` `SkewedRandomRange(1, 10, 0.3f);` `SkewedRandomRange(1, 10, 1.1f);` `SkewedRandomRange(1, 10, 1.25f);` `SkewedRandomRange(1, 10, 2f);` See All
bottom of page