Как сделать выбор в зависимости от полученого случайного числа?

Я получаю случайное число ( от 0 - 100 ( не целое) ) и нужно например что если число меньше или равно 10, то сделать что-то, а если число больше 10, но меньше или равно 20, то выполнить что-то.

Проблема того способа, который у меня - это то, что шансы могут быть одинаковы и тогда выполнится первое такое условие. Я исправил это костылем, запихнув одинаковые шансы друг в друга, но если шансы изменить на неодинаковые, то все перестанет работать. Как это можно исправить?

Код:

if (RandomChance <= ThisBox.LegendaryBrawlerChance)
{
    GetBrawler(Rarity.Legendary);
}
else if (RandomChance <= ThisBox.MythicalBrawlerChance && RandomChance > ThisBox.LegendaryBrawlerChance)
{
    GetBrawler(Rarity.Mythical);
}
else if (RandomChance <= ThisBox.EpicBrawlerChance && RandomChance > ThisBox.MythicalBrawlerChance)
{ // Костыль
    int random = Random.Range(0, 2);

    if (random == 0)
    {
        GetBrawler(Rarity.Epic);
    }
    else
    {
        GetBrawler(Rarity.Chromatic);
    }
}
else if (RandomChance <= ThisBox.SuperRareBrawlerChance && RandomChance > ThisBox.EpicBrawlerChance)
{
    GetBrawler(Rarity.SuperRare);
}
else
{
    GetBrawler(Rarity.Rare);
}

Ответы (1 шт):

Автор решения: Yaroslav

Лол, как раз только что писал.

using System;
using System.Linq;

public class Foo
{
    public Foo () 
    {
        // шансы в пропорциях
        float[] Proportions = new[] { 5f, 15f, 20f }; // в сумме 40
        // 0: 12.5% (5/40)
        // 1: 37.5% (15/40)
        // 2: 50% (20/40)
        int Index = GetRandomIndex(Proportions);
    }

    public int GetRandomIndex (float[] proportions)
    {
        float ProportionsSum = proportions.Sum();
        float RandomValue = UnityEngine.Random.Range(0, ProportionsSum);
        for (int i = 0; i < proportions.Length; i++)
            if (RandomValue > proportions[i])
                RandomValue -= proportions[i];
            else
                return i;
        throw new Exception("You are suck! Return it as it was.");
    }
}
→ Ссылка