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();
์ด๋ฐ๊ฒ ์๋ฐ์?
๊ฒฐ๊ณผ๋ ์๋ฐ์?
์๋ฐ์ด๋์ ๊ฒฐ๊ณผ๋ ๊ฑ ์ง์ ์ ใ ๋์ถฉ ์์ ๋จธ๊ฒ