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);`