【发布时间】:2019-08-05 11:26:33
【问题描述】:
我一直对为什么这不能正常工作感到头疼。我有一个列表可以改变每秒生成怪物的概率。我想从这个列表中选择一个随机加权的敌人。我在某个地方出错了,我认为它在"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;
}
以下是创建概率列表的难度调整函数。
public void DifficultyAdjustments()
{
SecondsElapsed += 10; // for debugging
Min_Tier += 10 * (End_Min_Tier - Start_Min_Tier) / (TimeinMinutes * 60);
Peak_Tier += 10 * (End_Peak_Tier - Start_Peak_Tier) / (TimeinMinutes * 60);
Max_tier += 10 * (End_Max_Tier - Start_Max_Tier) / (TimeinMinutes * 60);
for (int T = 0; T < TotalNumberofTiers; T++)
{
if (T < Min_Tier)
WeightT = 0;
if (T > Max_tier)
WeightT = 0;
if (Min_Tier <= T & T < Peak_Tier)
WeightT = 1 + (Max_weight - 1) / (Peak_Tier - Min_Tier) * (T - Min_Tier);
if (Peak_Tier <= T & T < Max_tier)
WeightT = 1 + (Max_weight - 1) / (Peak_Tier - Max_tier) * (T - Max_tier);
TierWeights[T] = WeightT;
TierProbability[T] = WeightT / TierWeights.Sum();
}
print(EnemySelection()); // for debugging
}
【问题讨论】: