从未排序的加权列表中选择敌人

时间:2019-08-05 11:26:33

标签: c# linq unity3d math

我一直在想为什么这不能正常工作。我有一个列表,可以改变怪物每秒产生的概率。我想从此列表中选择一个随机加权的敌人。我在某个地方出错了,我认为它是在String path = getClass().getProtectionDomain().getCodeSource().getLocation().getFile(); boolean onWar = path.contains("WEB-INF"); 区域附近。

"EnemyToSpawnNext = Enemies[sorted[T].Key].Enemie[0].EnemyPrefab;"

以下是创建概率列表的难度调整功能。

public GameObject EnemySelection()
{

    var sorted = TierProbability.Select((x, i) => new KeyValuePair<int, float>(i, x)).OrderBy(x => x.Value).ToList();
    List<int> idx = sorted.Select(x => x.Key).ToList();
    List<float> B = sorted.Select(x => x.Value).ToList();


    float P = UnityEngine.Random.Range(0, 1);
    float Sum_prob = 0;
    for (int T = 0; T < TotalNumberofTiers; T++)
    {

        Sum_prob += sorted[T].Value; 
        print(Sum_prob);
        if (Sum_prob >= P)
        {
            EnemyToSpawnNext = Enemies[sorted[T].Key].Enemie[0].EnemyPrefab;

            break;
        }
    }
    return EnemyToSpawnNext;

}

1 个答案:

答案 0 :(得分:1)

问题是你的P

 float P = UnityEngine.Random.Range(0, 1);

此P始终为零

改为使用此:

float P = UnityEngine.Random.Range(0f,1f);