Math(計算)

AIと読む
全ドキュメントを1ファイルで(llms-full.txt)

数値を計算するノードです。全16種。float を受けて float を返す形なので、 ツマミの値を別の値に変換する中継として使います。

3つの構造

ポート構成はノード自身ではなく、継承している基底クラスが決めています。

構造ポート該当ノード
二項演算A / BResultAdd / Minus / Multiply / Divide / Modulo / Pow / Max / Min / Average / Abs
単項演算A / TriggerResultCeil / Floor / Round / Trunc / Fract
独自A / B / T / TriggerOutLerp

ノード一覧

ノード説明
AddA + B
MinusA − B
MultiplyA × B
DivideA ÷ B。B が 0 のときは出力を更新しません(下記の注記)
ModuloA を B で割った余り。ループするカウンタを作るときに使います
PowA の B 乗
MaxA と B の大きいほう。値の下限止めに使えます
MinA と B の小さいほう。値の頭打ちに使えます
AverageA と B の平均
AbsA の絶対値。B ポートは使われません(下記の注記)
CeilA を切り上げ
FloorA を切り捨て
RoundA を四捨五入
TruncA を 0 方向へ切り捨て
FractA の小数部分だけを取り出します。0〜1 を繰り返す信号を作れます
LerpA と B を T で線形補間します

知っておくと引っかからないこと

Trigger は「サンプル&ホールド」ではありません

Ceil / Floor / Round / Trunc / Fract にある Trigger は、入力を止めて値を保持するものではありません。

A は常に流れていて、値が変わるたび Result が出ます。Trigger がするのは 今の計算結果をもう一度下流へ押し出すことだけです。

triggerInput.OnTriggerChanged.Subscribe(_ => { OutResult(); }).AddTo(this);

拍に合わせて下流を再発火させたいときに使ってください。A を止める用途には使えません。

Divide のゼロ除算は「無視」されます

B が 0 のとき、Divide は出力そのものを更新しません。

if (currentValueB.Value == 0) return;

NaN や 0 が出るのではなく、直前の値が残り続けます。落ちないので安全ではありますが、 下流から見ると「値が固まった」ようにしか見えません。動きが止まったら B を疑ってください。

Lerp の T は 0〜1 にクランプされます

Mathf.Lerp を使っているため、T に範囲外の値を入れても A と B の外側へは出ません。端で止まります。 A→B を飛び出させたいときは Lerp ではなく Multiply と Add を組み合わせてください。

Abs の B ポートは何にも繋がっていません

Abs は二項演算の基底クラスを継承しているため A / B 両方のポートが生えますが、 実装は Mathf.Abs(A) だけで B を一切参照していません。B に挿しても何も起きません。

二項演算は A / B どちらが動いても再計算します

Add や Multiply などの二項演算は、A と B のどちらか一方が変わった時点で結果を出し直します。 片方を「設定値」、もう片方を「動く信号」として使う組み方で問題ありません。

関連

このページへのリンク

同じページを参照しているページ