Mathf.Clamp(v, min, max)
(min < 0 < max)とした時、0 < v
となった時にmax
の値をとる
transform.localEulerAngles
の値域は0~360だった- インスペクター上では負数もそのまま表示されるが、実際は内部で0~360°の値に変換されている模様
そうなると、以下のように理解ができる:
float x = transform.localEulerAngle.x;
Mathf.Clamp(x, -40, 40) // 元の式
transform.localEulerAngle = new Vector3(-100, 0, 0);
// この直後、Unity側で次の処理が入る模様
transform.localEulerAngle = new Vector3(360 + -100, 0, 0);
// よって、Mathf.Clampは
Mathf.Clamp(x, -40, 40);
Mathf.Clamp(260, -40, 40);
40