Formula ノード
Note
バージョン 2019/2020 LTS を使用している場合は、Unity Asset Store から Visual Scripting パッケージをダウンロードしてください。
Formula は、テキスト式と引数のリストによって論理式や数式を直接評価する強力なノードです。
Important
Formula ノードを使用した場合のパフォーマンスは、二分木構造トラバーサルのオーバーヘッド(キャッシュの試行に関わらず) のために、演算子ノードを個別に使用した場合に比べて著しく遅くなります。このノードは毎フレームで使用しないようにすることをお勧めします。
Formula は、ロジックの場合はブール値、数学の場合は数値を返しますが、どのような型の値でも返すことができます。
ヘッダー内の最初のテキストフィールドは式自体です。
2 つ目のテキストフィールドは引数の数です。これはデフォルトで 2 に設定されており、A と B の入力が提供されます。Formula は最大 10 個の引数を持つことができ、これは常にアルファベット順に並べられます。さらに必要な場合、B、C、D、E、のように順に名付けられます。
例えばこの Formula は、下記を示すブール値を返します。
- ゲーム開始から最低 10 秒が経過したかどうか。
- 現在のオブジェクトの名前は Player である。
引数
変数名
変数名を式中で直接使用することができます。例えば、health という名前の Graph 変数に、health > 50 という式を入力するだけでブール値を返させることができます。引数名は以下の優先順位で評価されます。
- アルファベット順の引数名 (a - z)
- Graph 変数の名前
- Object 変数の名前
- Scene 変数の名前
- Application 変数の名前
- Saved 変数の名前
プロパティとメソッド
[arg.prop] の表記を使用して、引数あるいは変数のプロパティの値を取得できます。例えば、位置が Vector 3 の Object 変数の場合、[position.x] = 0 を使用して、それが 0 に等しいかどうかを確認できます。パラメーターのないメソッドの戻り値を取得するには [arg.Method()] の表記を使用します。
ノート: プロパティやメソッドへのアクセスは、AOT コンパイルを必要とするプラットフォームには適さない場合があります。これは、AOT の事前ビルドは名前によってのみアクセスされるメンバのスタブを生成できないためです。
リテラル
固定値を割り当てるには以下のリテラルを使用します。
リテラル | 説明 | 例 |
---|---|---|
Number | 整数または浮動小数点数 | 3.5 |
String | アポストロフィーに挟まれたテキスト | "Hello World!" |
Boolean | ブール値 | true, false |
Null | null 定数 | a != null |
Delta Time | Unity フレームのデルタタイム | 30 * dt |
Invert Delta Time | デルタタイムの逆数 | 30 / second |
演算子
全ての一般的な論理演算子と数学演算子に加え、スクリプト内でカスタム演算子のオーバーロードによって定義されたものも、式内で使用できます。
演算子 | 操作 | ランク | 結果 | 例 |
---|---|---|---|---|
not, ! | 論理否定 | 単項 | オペランドの反対 | not true |
- | 数値否定 | 単項 | オペランドの反転 | -5 |
and, && | 論理 AND | 二項 | 両方のオペランドが true の場合は true | (a < 5) and (b > 3) |
or, || | 論理 OR | 二項 | いずれかのオペランドが true の場合は true | (a < 5) or (b > 3) |
=, == | 等値 | 二項 | 2 つのオペランドが等しい場合は true | a = b |
!=, <> | 不等価 | 二項 | 2 つのオペランドが等しくない場合は true | a != b |
<, <=, >, >= | 数値比較 | 二項 | 数値比較の結果 | a >= 10 |
+ | 加算 | 二項 | 2 つのオペランドの和 | a + 5 |
- | 減算 | 二項 | 2 つのオペランドの差 | b - 3 |
* | 乗算 | 二項 | 2 つのオペランドの積 | 12 * a |
/ | 除算 | 二項 | 2 つのオペランドの商 | b / 2 |
% | 剰余 | 二項 | 2 つのオペランドを割った余り | a % 2 |
?: | 条件 | 三項 | 条件が true の場合は左のオペランドで、そうでない場合は右のオペランド | (health > 0) ? "Alive" : "Dead" |
~ や >> などの一般的なビット演算子もサポートされています。
関数
以下の表に含まれる全ての関数も使用できます。
名前 | 結果 | 例 |
---|---|---|
abs | 指定の数値の絶対値 | abs(-1) |
acos | 余弦が指定の数値である角度 | acos(1) |
asin | 正弦が指定の数値である角度 | asin(0) |
atan | 接線が指定の数値である角度 | atan(0) |
ceiling | 指定数値以上の最小の整数 | ceiling(1.5) |
cos | 指定角度の余弦 | cos(0) |
exp | e の、指定数値によるべき乗 | exp(0) |
floor | 指定数値以下の最大の整数 | floor(1.5) |
log | 指定数値の対数 | log(1, 10) |
log10 | 10 を底とする、指定数値の対数 | log10(1) |
max | 指定された 2 つの数のうち大きい方 | max(1, 2) |
min | 2 つの数のうち小さい方 | min(1, 2) |
pow | 指定数値の、指定数値によるべき乗 | pow(3, 2) |
round | 指定の数値を四捨五入して、最も近い整数あるいは、指定の小数点以下の桁数にします。 | round(3.222, 2) |
sign | 数値が正の場合は 1、負の場合は -1 | sign(-10) |
sin | 指定の角度の正弦 | sin(0) |
sqrt | 指定の数値の平方根 | sqrt(4) |
tan | 指定の角度の接線 | tan(0) |
truncate | 数値の整数部 | truncate(1.7) |
v2 | 2D ベクトルを作成します。 | v2(0, 0) |
v3 | 3D ベクトルを作成します。 | v3(0, 0, 0) |
v4 | 4D ベクトルを作成します。 | v4(0, 0, 0, 0) |