У меня для этого вот эта функция используется:
Передаем массив шансов(можно в процентах(их сумма 100) или как угодно),
/// <summary>
/// Функция получает случайный индекс массива, учитывая шанс получить этот самый индекс
/// (например из: 50, 10, 0, 20) наибольший шанс получит 0 индекс с шансом 50
/// </summary>
/// <param name="mas_chance">массив относительных значений шансов получить индекс</param>
/// <returns></returns>
public static int GetRandomChanceIndex(int[] mas_chance)
{
if (mas_chance.Length == 0)
return 0;
int sum = 0;
for (int i = 0; i < mas_chance.Length; i++)
{
sum += mas_chance[i];
}
int r = UnityEngine.Random.Range(0, sum);
sum = 0;
//int n = 0;
for (int i = 0; i < mas_chance.Length; i++)
{
sum += mas_chance[i];
if (sum > r)
return i;
}
return 0;
}