Angle(角度)
Promete では、回転角度を表すために Angle 構造体を使用します。
ノードの Angle プロパティや Vector.Angle() メソッドなど、角度を扱うすべての場所で使われます。
Angle型を生成する
Section titled “Angle型を生成する”Angle.FromDegrees Angle.FromRadians メソッドで、それぞれ角度とラジアンから生成できます。
.Degrees / .Radians 拡張プロパティを用いた糖衣構文でも記述でき、こちらのほうが簡潔になります。
// 静的メソッド経由var a1 = Angle.FromDegrees(90);var a2 = Angle.FromRadians(MathF.PI);
// 糖衣構文var a3 = 90.Degrees;var a4 = (MathF.PI / 2).Radians;0度を表す定数 Angle.Zero も用意されています。
値を取り出す
Section titled “値を取り出す”ToDegrees() / ToRadians() メソッドで数値として取り出せます。
var angle = 90.Degrees;
float deg = angle.ToDegrees(); // 90.0float rad = angle.ToRadians(); // π/2 ≈ 1.5708Angle どうしの加減算、スカラーとの乗除算、剰余演算が使えます。
var a = (MathF.PI / 2).Radians; // 90度var b = 45.Degrees; // 45度
Angle sum = a + b; // 135度Angle diff = a - b; // 45度Angle neg = -a; // -90度Angle twice = a * 2.0f; // 180度Angle half = a / 2.0f; // 45度Angle wrap = a % 360f; // 90度(360度で正規化する場合など)サンプル:毎フレーム回転させる
Section titled “サンプル:毎フレーム回転させる”private float _angle = 0;
public override void OnUpdate(){ _angle += Time.DeltaTime * 90; // 1秒で90度回転 sprite.Angle = _angle.Degrees;}float の変数で角速度を計算し、代入時に .Degrees で Angle に変換するパターンがよく使われます。
サンプル:マウスの方向を向く
Section titled “サンプル:マウスの方向を向く”Vector.Angle() は2点間の角度を Angle 型で返します。
public override void OnUpdate(){ Angle direction = player.Location.Angle(mouse.Position); player.Angle = direction;}Angle型へのfloat/intの暗黙的な変換はありません。.Degrees/.Radians拡張プロパティを使ってください- 内部的には度数法(0〜360°)で値を保持しています。0を超えた値や負の値もそのまま保持されます(自動で正規化はされません)
- 正規化したい場合は
% 360f演算子を使います