数学
算術、丸め、乱数、ブール論理、比較——これらの pure な値ノード
Math は、値を保存するのではなく算出する場所です:算術、丸め、最小値と最大値、乱数、ブール論理、比較です。下流で数値や条件が必要になったときは、常にここのノードを使います——Flow の If 分岐、ウィジェットのサイズ、カウンターの次の値などです。パレットは Boolean と Compare の各ノードグループもこの分類に折り込んでいるため、この 3 つをまとめてこのページで説明します。
規約
- このページのすべてのノードは
Pureです。 どれも exec ピンを持ちません。それぞれresultが読み取られたときに計算され、event・function・macroのいずれのグラフでも、また Blueprint Value の中でも使用できます。 - 何もキャッシュされません。 ノードは読み取られるたびに再実行されるため、1 つのノードから出る 2 本のエッジはそのノードを 2 回評価します。
+であれば無害ですが、Random Floatでは無害ではありません。 - 接続されたエッジはカードの入力欄より優先されます。 カード上にリテラル値を入力できます と記されたピンは、ノードカード上に入力欄を表示しますが、その入力欄はピンにエッジがない間しか読み取られません。
- 有限数でないものはすべて NaN として扱われます。 数値ピンは、有限数はそのまま、
trueとfalseは1と0として受け取り、数値文字列は解析して受け取ります。それ以外のもの——null、空のカード入力欄、Infinity——はすべて NaN であり、NaN を渡されたノードは NaN を出力します。1 つのオペランドが欠けているだけで、その下流のすべての結果が NaN になります。 integerはfloatへ流れますが、逆はありません。Round、Floor、Ceilはintegerを出力し、これはどのfloat入力にも接続できます。float出力はinteger入力には接続できません。どちらもstring入力には接続でき、算出した数値はこの経路でLogに届きます。
算術
オペランドを 2 つ受け取り、数値を 1 つ返します。
| ピン | 方向 | 型 | 備考 |
|---|---|---|---|
a | in · data | float | カード上にリテラル値を入力できます。 |
b | in · data | float | カード上にリテラル値を入力できます。 |
result | out · data | float |
| ノード | 型 | 結果 |
|---|---|---|
+ | blueprint.math.add | a と b、および追加されたオペランドの合計。 |
− | blueprint.math.subtract | a から b を引いた値。 |
× | blueprint.math.multiply | a と b の積。 |
÷ | blueprint.math.divide | a を b で割った値。 |
Modulo | blueprint.math.modulo | a を b で割った余りで、符号は a に従います:−7 と 3 では −1 になり、2 にはなりません。 |
+ は、5 つのうち唯一 3 つ以上のオペランドを受け取れるノードです。カード上の入力追加コントロールが in_1、in_2、……を追加し、Input 3 以降というラベルが付きます。ノードは自分が持つすべてのデータ入力を合計します。上の表には、最初から用意されている 2 つのピンだけを載せています。
÷ は除数をチェックしません。ゼロで割ると Infinity または −Infinity になり、0 ÷ 0 は NaN になります。どちらも次のノードでは生き残りません——このページでは有限でない数値はすべて NaN として扱われるためです——そのため不具合は、原因となった除算から数ノード離れた場所で表面化します。まず除数を 0 と比較してください。
丸めと符号
オペランドを 1 つ受け取り、数値を 1 つ返します。
| ピン | 方向 | 型 | 備考 |
|---|---|---|---|
value | in · data | float | カード上にリテラル値を入力できます。 |
result | out · data | float または integer | Round、Floor、Ceil は integer を出力し、残りの 3 つは float を出力します。 |
| ノード | 型 | 結果 |
|---|---|---|
+1 | blueprint.math.increment | value に 1 を加えた値。 |
−1 | blueprint.math.decrement | value から 1 を引いた値。 |
Abs | blueprint.math.abs | value の絶対値で、符号は取り除かれます。 |
Round | blueprint.math.round | 最も近い整数。ちょうど半分の値は上に丸められるため、2.5 は 3 に、−2.5 は −2 になります。 |
Floor | blueprint.math.floor | value を超えない最大の整数。 |
Ceil | blueprint.math.ceil | value を下回らない最小の整数。 |
+1 と −1 は計算するだけで、保存はしません。カウンターを進めるには、依然として Get Var から +1 を経て Set Var へとつなぐ必要があります——Variables を参照してください。
Min と Max
| ピン | 方向 | 型 | 備考 |
|---|---|---|---|
a | in · data | float | カード上にリテラル値を入力できます。 |
b | in · data | float | カード上にリテラル値を入力できます。 |
result | out · data | float |
| ノード | 型 | 結果 |
|---|---|---|
Min | blueprint.math.min | 自分のオペランドのうち最小のもの。 |
Max | blueprint.math.max | 自分のオペランドのうち最大のもの。 |
どちらも + と同じ方法でオペランドを追加できます:入力追加コントロールが in_1、in_2、……を追加し、比較は上記の 2 つだけでなく、ノード上のすべてのデータ入力を対象にします。いずれか 1 つのオペランドが有限数でない場合、ノードは NaN を出力します——不正なオペランドを取り除いて残りを比較する、ということはしません。
Random Float
blueprint.math.randomFloat · Pure
| ピン | 方向 | 型 | 備考 |
|---|---|---|---|
min | in · data | float | カード上にリテラル値を入力できます。数値でない場合は 0 にフォールバックします。 |
max | in · data | float | カード上にリテラル値を入力できます。数値でない場合は 1 にフォールバックします。 |
result | out · data | float |
[min, max) の範囲で一様に分布します:min は出る可能性がありますが、max は出ません。2 つの境界値は使用前にソートされるため、大きい方の数値を min に接続しても、エラーになったり空の範囲になったりせず、同じ範囲になります。
Random Integer
blueprint.math.randomInteger · Pure
| ピン | 方向 | 型 | 備考 |
|---|---|---|---|
min | in · data | integer | カード上にリテラル値を入力できます。数値でない場合は 0 にフォールバックします。 |
max | in · data | integer | カード上にリテラル値を入力できます。数値でない場合は 1 にフォールバックします。 |
result | out · data | integer |
min から max までの整数の中で一様に分布し、両端を含みます——1 と 6 ならサイコロであり、五面体ではありません。境界値はまずソートされ、その後内側の整数に寄せられます(min は切り上げ、max は切り下げ)。それによって両者の間に何も残らない場合、結果は切り上げた min になります。
どちらの乱数ノードもシードを受け取らず、結果も記憶されません。読み取るたびに再抽選されます:1 つの Random Integer を 2 つのピンに接続すると、それぞれに異なる数値が渡され、後でもう一度読み取るとまた別の値になります。同じ数値を 2 回使う必要がある場合は、その結果を変数に書き込んでください。
Boolean
ここでの入力は boolean であり、カードにリテラルを入力できません。そのため両方のオペランドを接続する必要があります。接続されていない真偽値ピンは false として読み取られます。
| ピン | 方向 | 型 | 備考 |
|---|---|---|---|
a | in · data | boolean | Not では Value というラベルが付きます。 |
b | in · data | boolean | Not にはこのピンがありません。 |
result | out · data | boolean |
| ノード | 型 | 結果 |
|---|---|---|
And | blueprint.boolean.and | 両方のオペランドが true のとき true。 |
Or | blueprint.boolean.or | どちらかのオペランドが true のとき true。 |
Not | blueprint.boolean.not | a の反転。 |
Xor | blueprint.boolean.xor | ちょうど一方のオペランドだけが true のとき true。 |
真偽値でない入力は拒否されるのではなく変換されます。ゼロでない有限数は true、0 は false、Infinity は false です。文字列は前後の空白を除去したうえで大文字小文字を区別せずに照合されます:"true"、"1"、"yes" は true、""、"false"、"0"、"no" は false、それ以外の空でない文字列はすべて true です。
Compare
Equal と Not Equal は両側に any を取り、JavaScript の === と !== で比較します。変換は行われません。数値の 1 と文字列の "1" は等しくなく、内容が同じでも別々に作られた 2 つの配列も等しくありません——検査されているのは同一性です。
| ピン | 方向 | 型 | 備考 |
|---|---|---|---|
a | in · data | any | |
b | in · data | any | |
result | out · data | boolean |
| ノード | 型 | 結果 |
|---|---|---|
Equal | blueprint.compare.equal | a と b が厳密に等しいとき true。 |
Not Equal | blueprint.compare.notEqual | 等しくないとき true。 |
どちらのピンもカードにリテラルを入力できず、未接続のピンは何にも解決されません——そのため両方のピンが空の Equal は「何もない」同士を比較し、true を報告します。両側とも接続してください。
4 つの数値比較ノードは代わりに float を取り、このページの他の部分と同じ方法で変換を行います。
| ピン | 方向 | 型 | 備考 |
|---|---|---|---|
a | in · data | float | カード上にリテラル値を入力できます。 |
b | in · data | float | カード上にリテラル値を入力できます。 |
result | out · data | boolean |
| ノード | 型 | 結果 |
|---|---|---|
Greater Than | blueprint.compare.greaterThan | a が b より大きい。 |
Greater Than Or Equal | blueprint.compare.greaterThanOrEqual | a が b より大きいか等しい。 |
Less Than | blueprint.compare.lessThan | a が b より小さい。 |
Less Than Or Equal | blueprint.compare.lessThanOrEqual | a が b より小さいか等しい。 |
どちらかのオペランドが有限数に解決できない場合、この 4 つはすべて false を出力します。このときは、ある比較とその逆の比較の両方が false になるため、一方をもう一方の否定として扱ってはいけません。反転するには、反対のノードを選ぶのではなく Not を使ってください。
記号による比較
より古い比較ノードの集まりで、既存のグラフが使用しているため登録が維持されています。形は数値の Compare ノードと同じですが、規則が異なります。
| ピン | 方向 | 型 | 備考 |
|---|---|---|---|
a | in · data | float | カード上にリテラル値を入力できます。 |
b | in · data | float | カード上にリテラル値を入力できます。 |
result | out · data | boolean |
| ノード | 型 | 結果 |
|---|---|---|
= | blueprint.math.equal | 2 つの数値が等しい。 |
≠ | blueprint.math.notEqual | 等しくない。 |
< | blueprint.math.less | a が b より小さい。 |
≤ | blueprint.math.lessOrEqual | a が b より小さいか等しい。 |
> | blueprint.math.greater | a が b より大きい。 |
≥ | blueprint.math.greaterOrEqual | a が b より大きいか等しい。 |
両方のオペランドはまず数値に変換されるため、Equal とは異なり = は数値の 1 と文字列の "1" を等しいと判断します。何を問いたいかで使い分けてください:数値としての等しさには =、同一性には Equal を使います。
どちらかのオペランドが数値でない場合、≠ は true を出力し、残りの 5 つは false を出力します。