まず大事なこと
expressionは、リストの各要素ごとに1回ずつ評価されます- つまり
list = [1, 2, 3]でexpression = item * 2なら、- 1個目では
1 * 2 - 2個目では
2 * 2 - 3個目では
3 * 2が順番に実行されます
- 1個目では
使える名前一覧
| 名前 | 意味 | 例 |
|---|---|---|
item |
今見ている要素そのもの | item * 2 |
index |
何番目の要素か。0始まりです | item + index |
count |
全体の要素数です | index / count |
x, y, z, w |
補助入力ピン、または Inspector で与える数値です | item * x |
vec, vx, vy |
補助 Vec2 入力、または Inspector の vec_x, vec_y です |
length(vec) |
flag |
補助 Bool 入力、または Inspector の既定値です | if(flag, item, 0) |
time, frame, total_frames |
評価時の時刻情報です | sin(time * pi * 2) |
Map 要素の時
要素が Map の時は、そのキー名をそのまま式に書けます。
たとえば要素がこうなら:
{ "index": 0, "value": 0.25 }
式の中でそのままこう書けます。
value < 0.5
index + 1
よくある入力ごとの読み方:
| 入力元 | 要素の形 | 式で使える名前 |
|---|---|---|
| 普通の数値リスト | 1, 2, 3 |
item, index, count |
ListEnumerate |
{ "index": 0, "item": 10 } |
index, item |
ListZip |
{ "index": 0, "a": 1, "b": 10 } |
index, a, b |
CartesianProduct |
複数キーの Map | 各キー名をそのまま使えます |
よく使う式
item * 2- 数値を2倍します
item + index- 要素番号ぶんだけ値をずらします
item * x- 外から与えた係数で各要素をまとめて変換します
value < 0.5- Map の
valueを見て Bool を作ります
- Map の
a + bListZipの2本を足します
vec2(item, index)- 数値リストから Vec2 リストを作ります
具体例
例1: 数値を2倍にする
入力:
[1, 2, 3]
設定:
item_type = Numberoutput_type = Floatexpression = item * 2
出力:
list = [2.0, 4.0, 6.0]
count = 3
例2: Map を Bool に変換する
入力:
[
{ "index": 0, "value": 0.25 },
{ "index": 1, "value": 0.75 }
]
設定:
item_type = Mapoutput_type = Boolexpression = value < 0.5 && index == 0
出力:
list = [true, false]
count = 2
例3: ListZip の結果を足し算する
入力:
[
{ "index": 0, "a": 1, "b": 10 },
{ "index": 1, "a": 2, "b": 20 }
]
設定:
item_type = Mapoutput_type = Floatexpression = a + b
出力:
list = [11.0, 22.0]
count = 2
例4: 変数や補助入力を使ってまとめて倍率を変える
入力:
[1, 2, 3]
設定:
item_type = Numberoutput_type = Floatexpression = item * xx = 10
出力:
list = [10.0, 20.0, 30.0]
count = 3
x は Inspector で直接入れてもよいですし、Variable Ref を x 入力ピンへつないでも使えます。
どういう時に使うか
- range / seed / zip / enumerate の結果を別の値列へ変換したい時
BatchRenderへ渡す前に、値候補を軽く加工したい時
注意
- v1 は constrained expression です
- 任意 subgraph を各要素に回すノードではありません
Map要素のキー名とx,y,z,w,vec,flagが同名の時は、補助入力側の名前が優先されます