どれだけ食べても太らない方法(平方根&対数)

どれだけ食べても太らない方法(平方根&対数)
どれだけ食べても太らない方法
食べたものによってキャラクターの大きさを大きくしたいとき。
「食べた量」=「キャラクターのスケール」とすると…
寿司100個食べた = スケールも100倍
となってしまいキャラクターが極端に大きくなる。
食べた分だけスケールも等しく増える。
これを 「食べた量が増えるほどスケールの成長スピードを落とす」 ようにしたい
■方法1 平方根を使う (Mathf.Sqrt())
Mathf.Sqrt(平方根にしたい数値)といった感じで使う
1 2 3 |
private int sushi; float scale = Mathf.Sqrt(sushi); |
平方根は「ある数を2回かけて元の数になる数」
√9 =3
√16 =4
√25 =5
√100(個) =10(倍)
100個食べてもスケールは10倍にしかならない
1 |
float scale = Mathf.Sqrt(sushi) / 10f; |
↓
y=√sushi/10
とすると100個食べた状態でスケールが1となり
y=√100/10 = 1
200個食べてもスケールは1.41倍
y=√200/10 = 1.41
方法2 ■対数を使う (Mathf.Log10())
1 2 3 |
private int sushi; float scale = Mathf.Log10(sushi); |
対数は「ある数が何倍になったかを表す数」
10を何回かけると100になるか = 2回なので
「100の10を底とする対数(log10)」は「2」
Mathf.Log10(X) を使うと「10を何回かけたら「X」になるか?」を計算できる
1 2 3 4 |
Debug.Log(Mathf.Log10(100)); // 出力: 2 (10^2 = 100) Debug.Log(Mathf.Log10(1000)); // 出力: 3 (10^3 = 1000) Debug.Log(Mathf.Log10(10)); // 出力: 1 (10^1 = 10) Debug.Log(Mathf.Log10(1)); // 出力: 0 (10^0 = 1) |
Log10(20) = 1.301
Log10(40) = 1.602
Log10(80) = 1.903
Log10(100個) = 2.000倍
100個食べてもスケールは2倍にしかならない
1 |
float scale = Mathf.Log10(sushi) - 1.0f; |
とすると100個食べた状態でスケールが1となり
1000個食べたとしてもスケールは2倍
平方根よりスケールの成長をゆるやかにできる