パッチ
パッチは、描いて作る挙動です。単純だが値を持てず計算もできないイベントと、何でもできるが コードを書かせる script の、ちょうど中間に位置します。
「…ただしスコアが 10 を超えているときだけ」「…毎回もう少し遠くへ動かす」と言いたくなった、 その最初の瞬間にパッチへ手を伸ばしてください。
パッチは解釈されるのではなくコンパイルされるので、手で書いたコードとまったく同じ速さで動きます。 生成された script はコードパネルでいつでも読めます。グラフが意図どおりかを確かめる、いちばん 速い方法でもあります。
各ノードとそのポート: パッチノードのリファレンス — 24 カテゴリー、203 ノード。
ノードは 4 種類
| 種類 | 見分けかた | 何か |
|---|---|---|
| Event | 出力だけ。うち 1 つがパルス | グラフの始まり。起動時、タップ時、毎フレームなど |
| Effect | パルスの入力と出力がある | 順番に何かを行う |
| Control | パルスを分岐・反復させる | 分岐、ゲート、繰り返し、for-each、once、遅延 |
| Data | パルスがまったくない | 値。数値、合計、component のフィールドなど |
パルスのケーブルが、ものごとの起きる順番です。イベントノードからこれをたどれば、流れを 読んでいることになります。データのケーブルは値を運ぶだけで、順番を持ちません。
ポートとケーブル
ポートには型(数値・真偽値・文字列・ベクトル・色・オブジェクト)があり、型が合わないものは つながりません。実行する前に、かなりの数の間違いを捕まえてくれます。
ベクトルのポートは x・y・z に展開できるので、1 つだけつないで残り 2 つは入力する、
といったことができます。
つながずに残した入力は、ノードに打ち込んだ値を使います。たいていそれが望ましい形です。 変わる部分だけを配線してください。
どのオブジェクトを使うかをノードに伝える
component のノード(「get transform」「set material」など)は、どのオブジェクトかを知る必要が あります。
バインドを空のままにすると、このオブジェクト、つまりパッチが付いているオブジェクトを意味します。 指定すれば、そのオブジェクトに対して動きます。
知っておくと便利なことが 2 つあります。
- get 系のノードは寛容です。 そのオブジェクトが持っていない component を読んでも、グラフが 壊れるのではなく、何も返らないだけです
- set 系のノードは、埋めた項目しか書き込みません。 触っていない項目はそのまま残ります
画面で見えるほかのものと同じです。パッチと script の間で値をやりとりするときだけ気をつけてください。 script の回転はラジアンです。
カタログの中身
| カテゴリー | 見つかるもの |
|---|---|
| events | 30 の起点。起動、フレーム、タップ、キー、衝突、トラッキング |
| components | あらゆる component の読み書き |
| math · vector · logic · string | 算術、比較、ベクトル、文字列 |
| flow | 分岐、ゲート、繰り返し、for-each、once、遅延、シーケンス |
| state | カウンター、トグル、タイマー、スムージング |
| entities · lifecycle | オブジェクトの検索、作成、スポーン、破棄 |
| physics | インパルス、フォース、速度、レイキャスト |
| net | マルチプレイヤー。送信、受信、共有状態、スポーン |
| globals · variables · messaging | ほかの patch や script と共有する値 |
| ui | インターフェースカードの変数の読み書き |
| functions | 別の patch、または script の呼び出し |
パッチを使い回す
グラフをリソースとして保存すると、ほかのキャンバスに置けるようになります。ふるまいは、どう 組み立てたかで決まります。
| 組み立てかた | できるもの |
|---|---|
| 入力ノードも出力ノードもなし | ビヘイビア。置くだけで動きます。配線は不要です |
| 入力・出力・パルス入力がある | ステップ。パルスが来たら実行され、そのあと出力が使えます |
| 入力と出力があり、パルスがない | 関数。出力は、読まれた場所で計算されます |
ソケットは、中に置いた入力ノード・出力ノードから決まります。1 つ足せば、呼び出し側すべてに 現れます。パッチを編集すれば、それを呼んでいるすべてがその場で更新されます。
純粋な関数の中に「このオブジェクト」は存在しないので、オブジェクトや component のノードはそこに 置くものではありません。関数はデータ・計算・ロジックにとどめ、シーンへの働きかけは呼び出し側で 行ってください。
パッチからは script も呼べます。カタログにないものに手を伸ばすときの、いつものやりかたです。
グラフより長生きする値
保持のしかたは 3 通りで、届く範囲が違います。
| 置き場 | 共有される相手 |
|---|---|
| variables | この 1 つのパッチのノード |
| globals | プロジェクト内のすべての patch・script・イベント |
| messages | 聞いている人すべて。名前を付けた一度きりの通知として |
globals のスコープは 2 つ。プロジェクト全体(space をまたいでも残る)と、space 限定(まっさらから 始まる)です。名前は配線ではなく入力で指定するので、経路が予測しやすくなります。
非常口
JavaScript を直接受け取るノードが 2 つあります。expression は値を返し、action は文を 実行します。script が触れるものはすべて、その中でも使えます。
これらは、カタログに足りないちょっとしたもののためにあり、常用するためのものではありません。 たくさん書いていると気づいたら、script を書いてグラフから呼んでください。
うまくいかないとき
コードパネルを開いてください。コンパイルできないグラフ(データ配線のループ、action ノードの壊れた JavaScript)は、そこで教えてくれます。
そして、壊れたパッチがシーンを道連れにすることはありません。ほかのものは動き続けます。
次へ: ゲーム操作 — 人が歩き回れるようにする。