回答編集履歴

2

レアケースとしてRandom.valueが1を出した場合、あるいは計算誤差による抽選漏れを考慮し、デフォルト値と条件を変更

2018/12/30 10:53

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -124,7 +124,7 @@
124
124
 
125
125
  var random = Random.value * this.weightSum;
126
126
 
127
- var result = default(T);
127
+ var result = this.pool.Keys.FirstOrDefault();
128
128
 
129
129
  foreach (var pair in this.pool)
130
130
 
@@ -136,7 +136,7 @@
136
136
 
137
137
  integratedWeight += weight;
138
138
 
139
- if (random < integratedWeight)
139
+ if (random <= integratedWeight)
140
140
 
141
141
  {
142
142
 

1

単純に乱数と比率を比較するパターンを追記

2018/12/30 10:53

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -34,6 +34,12 @@
34
34
 
35
35
  this.rotSpeed = (Random.value - this.Ratio) < 0.0f ? 1.2f : -1.2f;
36
36
 
37
+
38
+
39
+ // 得られた値を計算に組み込む必要がなければ、こっちの方がシンプルですね
40
+
41
+ // this.rotSpeed = Random.value < this.Ratio ? 1.2f : -1.2f;
42
+
37
43
  }
38
44
 
39
45
  }