public class Probability<T>
{
List<ProbabilityElement> probabilityList = new List<ProbabilityElement>();
public bool isEmpty { get { return probabilityList.Count <= 0; } }
public class ProbabilityElement
{
public T target;
public float probability;
public ProbabilityElement(T target, float probability)
{
this.target = target;
this.probability = probability;
}
}
public void Add(T target, float probability)
{
probabilityList.Add(new ProbabilityElement(target, probability));
}
public T Get()
{
float totalProbability = 0;
for (int i = 0; i < probabilityList.Count; i++)
totalProbability += probabilityList[i].probability;
float pick = Random.value * totalProbability;
for (int i = 0; i < probabilityList.Count; i++)
{
if (pick < probabilityList[i].probability)
return probabilityList[i].target;
else
pick -= probabilityList[i].probability;
}
return default(T);
}
}


์ด๊ฑฐ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋จ


//์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์„œ
Probability<Item> probability = new Probability<Item>();
//์ถ”๊ฐ€ํ•œ๋‹ค์Œ์—
probability.Add(item_0, 100);
probability.Add(item_1, 50);
probability.Add(item_2, 1);
//์–ป์–ด์˜ค๋ฉด ๋œ๋‹ค
Item item = probability.Get();