パッチ
パッチを使うと、コードを入力する代わりに、ノードとワイヤーでロジックを組み立てられます。イベントだけでは足りないときに使いましょう。
パッチは、イベントとスクリプトの中間にあたります。
- イベントはシンプルですが、値を保持したり計算したりはできません。
- スクリプトは何でもできますが、コードを書く必要があります。
「……ただしスコアが 10 を超えているときだけ」や「……毎回少しずつ遠くへ動かす」をやりたくなったら、パッチを試してみてください。
パッチは、手で書いたコードと同じ速さで動きます。Code パネルでは、いつでもパッチをコードとして確認できます。グラフが意図どおりに動くかを確かめる、いちばん手早い方法でもあります。
パッチノードのリファレンス(24 カテゴリー、203 ノード)に、すべてのノードとそのポートが載っています。
パッチを作る
- 左レールから Patch editor を開きます。シーンのグラフが表示されます。
- + Add node をクリックし、Events グループからノードを選びます。ここがグラフの出発点になります。
- 何かを実行するノードを追加します。例えば、コンポーネントを変更するノードです。
- イベントノードのパルス出力から、もう一方のノードのパルス入力へワイヤーをドラッグします。
- Code パネルを開き、グラフをコードとして確認します。
ノードの種類
| 種類 | 見分け方 | 役割 |
|---|---|---|
| イベント | 出力だけがあり、そのうち 1 つがパルス | グラフを開始します。起動時、タップ時、毎フレームなど |
| エフェクト | パルスの入力と出力がある | 何かを順番に実行します |
| コントロール | パルスを分岐させたり繰り返したりする | branch、gate、repeat、for-each、once、delay |
| データ | パルスがまったくない | 値を返します。数値、合計、コンポーネントのフィールドなど |
パルスのワイヤーは、処理が起きる順番を決めます。イベントノードからたどれば、処理の流れが読めます。データのワイヤーは値を運ぶだけで、順番はありません。
ポートとワイヤー
ポートにはそれぞれ型があります:数値、真偽値、文字列、ベクトル、色、オブジェクト。型が違うポートどうしはつながりません。これで、実行する前に多くのミスに気づけます。
ベクトルのポートは x、y、z に展開できます。そのうち 1 つにワイヤーをつなぎ、残りの 2 つには値を入力できます。
ワイヤーがつながっていない入力には、ノードに入力した値が使われます。ですから、変化する部分だけをワイヤーでつなぎましょう。
ノードが使うオブジェクトを選ぶ
「get transform」や「set material」のようなコンポーネントのノードは、どのオブジェクトを使うかを知る必要があります。
- オブジェクトを空のままにすると、ノードはこのオブジェクト、つまりパッチが付いているオブジェクトを使います。
- オブジェクトを設定すると、ノードは代わりにそのオブジェクトを操作します。
次の 2 つの性質のおかげで、扱いやすくなっています。
- Get ノードはエラーになりません。オブジェクトが持っていないコンポーネントを読み取っても何も返らず、グラフはそのまま動き続けます。
- Set ノードは、入力したものだけを変更します。それ以外はそのままです。
エディターのほかの表示と同じです。スクリプトはラジアンを使うので、パッチとスクリプトの間で回転を受け渡すときは変換してください。
ノードメニューの内容
| グループ | 含まれるもの |
|---|---|
| Events | 30 種類の開始点:起動、フレーム、タップ、キー、衝突、トラッキング |
| Components | あらゆるコンポーネントの読み取りと変更 |
| Math、Vectors、Logic、Strings | 計算、比較、ベクトル、テキスト |
| Flow | branch、gate、repeat、for-each、once、delay、sequence |
| State | counter、toggle、timer、smooth |
| Entities、Lifecycle | オブジェクトの検索、作成、スポーン、破棄 |
| Physics | インパルス、力、速度、レイキャスト |
| Multiplayer | 送信、受信、共有ステート、スポーン |
| Globals、Variables、Messaging | ほかのパッチやスクリプトと共有する値 |
| UI | UI カードの変数の読み取りと変更 |
| Functions | 別のパッチやスクリプトの呼び出し |
パッチを使い回す
グラフをパッチとしてプロジェクトのアセットに保存しておけば、ほかのキャンバスにドロップして使えます。どう使えるかは、作り方によって決まります。
| 作ったもの | できあがるもの |
|---|---|
| 入力ノードも出力ノードもない | ビヘイビア:ドロップするだけで動きます。ワイヤーは要りません |
| 入力、出力、パルス入力がある | ステップ:パルスが届くと実行され、そのあと出力が使えるようになります |
| 入力と出力はあるが、パルスはない | 関数:出力が読み取られる場所で、そのつど値が計算されます |
パッチのソケットは、中にある入力ノードと出力ノードから作られます。1 つ追加すると、そのパッチを使っているすべての場所に表示されます。パッチを編集すると、それを使っているものすべてがすぐに更新されます。
関数の中には「このオブジェクト」がないので、オブジェクトやコンポーネントのノードは使えません。関数はデータ、計算、ロジックに使い、シーンの操作は呼び出し元のパッチで行ってください。
パッチからはスクリプトも呼び出せます。どのノードでもできないことをするときの、いちばん一般的な方法です。
実行をまたいで値を保つ
値を保つ方法は 3 つあります。違いは、その値を誰が見られるかです。
| ノードグループ | 共有される範囲 |
|---|---|
| Variables | このパッチの中のノード |
| Globals | プロジェクト内のすべてのパッチ、スクリプト、イベント |
| Messaging | 待ち受けている全員。名前を付けて送る、1 回きりの通知です |
グローバルには 2 種類あります。
- project のグローバルは、見る人がスペースを移動しても値を保ちます。
- space のグローバルは、スペースごとに新しく始まります。
変数、グローバル、メッセージは、ワイヤーでつなぐのではなく、名前を入力して指定します。
JavaScript を 1 行書く
JavaScript を直接書けるノードが 2 つあります。
- Expression(
expression)は値を返します。 - Action(
action)は文を実行します。
この中では、スクリプトで使えるものをすべて使えます。
どのノードでもできない、ちょっとした処理を 1 つだけ書くときに使ってください。ここにたくさんのコードを書くようになったら、代わりにスクリプトを書き、グラフから呼び出しましょう。
うまく動かないとき
Code パネルを開いてください。グラフに問題がある場合は、そこに表示されます。よくある原因は 2 つあり、データのワイヤーがループしていることと、Action ノードの JavaScript が壊れていることです。
パッチが壊れていても、シーンは止まりません。ほかのパッチは動き続けます。
次へ: ゲームコントロール — 人が歩き回れるようにします。