// int d = System.Enum.GetNames(typeof(d)).Length; public static int Rand(float[] weight) { // 양수화 { float minValue = float.MaxValue; for (int i = 0; i < weight.Length; ++i) { if (weight[i] < minValue) { minValue = weight[i]; } } if (minValue < 0f) { for (int i = 0; i < weight.Length; ++i) { weight[i] -= minValue; } } } // 정규화, 0에서 1까지 증가하는 방식으로. float[] normalizedIncreasingWeight = new float[weight.Length]; { float sumWeight = 0f; for (int i = 0; i < weight.Length; ++i) { sumWeight += weight[i]; } for (int i = 0; i < weight.Length; ++i) { normalizedIncreasingWeight[i] = weight[i] / sumWeight; if (i > 0) { normalizedIncreasingWeight[i] += normalizedIncreasingWeight[i - 1]; } } } // float r = Rand(0f, 1f); for (int i = 0; i < normalizedIncreasingWeight.Length; ++i) { if (normalizedIncreasingWeight[i] >= r) { return(i); } } CustomLog.CompleteLogError("Assert"); return(0); }