ノードと用語

続行する前に、ノード の用語を注意して使用する必要があります。 ビジュアルスクリプトノード (または通常は ノード )を参照する場合、このテキストはグラフの一部である線で接続する小さなボックスを参照します。 シーンノード を参照すると、シーンを構成する要素 (ツリーの一部) が参照されます。名前は似ていますが、機能は違います。ここで ノード を参照する場合、特に指定しないかぎり、 ビジュアルスクリプトノード が参照されることを意味します。

../../../_images/visual_script16.png

ノード・プロパティ

ほとんどのビジュアルスクリプト実装と同様に、各ノードには編集可能なプロパティがあります。しかし、Godot では、読みやすさのために編集可能なコントロールを使用してノードが肥大化しないようにしています。

ノードは必要な情報を文字で表示していますが、しかし編集はインスペクタを通じて行います。編集するには、ノードを選択してからインスペクタ内にあるプロパティを編集してください。

ポートおよび接続

Godotビジュアルスクリプティングでのプログラミングは、各関数内の Nodes および Port Connections を介して行われます。

ポート

Godot ビジュアル スクリプティングのノードには Ports があります。これらはノードの左右に表示され、 Connections を作成するために使用できるエンドポイントです:Ports には SequenceData の 2 種類があります。

../../../_images/visual_script17.png

シーケンス・ポート は、操作が実行された後の状態を示しています。通常、 ノード が処理を終えると、右のポートから次のノードへ処理が移ります。もし何も接続されていないときは、関数はそこで終えるか、もしくは他の シーケンス・ポート が試されるでしょう(ノードによります)。これにより、白い線を追うことで関数内での処理の流れをたどることができます。すべての ノードシーケンス・ポート を持っているわけではありません。事実、ほとんどにはありません。

データ・ポート には、型指定された値が含まれています。型には、ブール値、整数、文字列、Vector3、配列、オブジェクトノード、シーンノードなど、任意の通常のGodot型を指定できます。ノードの右側にある データ・ポート は出力と見なされ、左側のポートは入力です。それらを接続すると、次のノードに情報が流れるようになります。

ただし、すべての データ・ポート タイプの間に、互換性と接続許可が有るわけではありません。 それぞれのタイプには異なる表現があるので、色とアイコンに特に注意を払ってください:

../../../_images/visual_script18.png

接続

接続は比較的簡単な作業です。 出力ポート入力ポート に向かってドラッグします。

../../../_images/visual_script_connect.gif

切断にはもう少し練習が必要です。 データ・ポート での切断は、 入力 側から離れる様にドラッグして行いますが、 シーケンス・ポート の場合は、 出力 側をドラッグして行います。

../../../_images/visual_script_disconnect.gif

この操作手順の違いを最初は奇妙に思えるかもしれませんが、 データ・ポート の接続は 1:N (1つの出力ポートを多くの入力に接続できる)、 シーケンス・ポート の接続は N:1 (多くのシーケンス出力が単一の入力に接続できる) であるために発生します。

空の領域(ドラッグして接続しますが、空白領域では押しません)への接続もコンテキストに依存し、最も一般的な操作のリストを提供します。シーケンスの場合は、条件ノードになります:

../../../_images/visual_script52.png

データの場合、コンテキスト set/get/call メニューが開きます:

../../../_images/visual_script53.png

ノードの追加

ついに!楽しいところに着きました!ただし、各タイプのノードの機能を詳しく説明する前に、ノードが最も一般的に追加および処理される方法について簡単に説明します。

シーンノードへのアクセス

最も一般的なタスクの 1 つは、シーンツリーノードにアクセスすることです (Visual Script Nodes と間違えないようにします)。シーン ツリーからドラッグしてキャンバスにドロップすると、このノードで メソッド (member function と呼ばれることもあります)を呼び出すように求めます。

../../../_images/visual_script19.png

ほとんどの場合、プロパティへのアクセスが必要ですが(詳細は後述)、場合によっては calling methods も便利です。メソッドは、オブジェクトに対して特定のアクションを実行します。この場合、マウスポインタをコントロールのローカル座標の位置にワープさせることができます。もう1つの一般的な使用例は、 queue_free メソッドを使用してノードを削除のためにキューに入れる場合です。

../../../_images/visual_script20.png

これは、編集中のシーンのいずれかのノードに Visual Script が含まれている場合にのみ機能することに注意してください。それ以外の場合は、警告が表示されます。

シーンノードのプロパティへのアクセス

これは、ビジュアルスクリプティングで Scene Nodes を編集する最も一般的な方法です。 Scene Tree から Scene Node を選択し、インスペクタに移動して、編集するプロパティ(値ではありません)の Name を探し、キャンバスにドラッグします:

../../../_images/visual_script21.png

その結果、 データ・ポート に書き込むことで、この値をスクリプトから変更できます。

もしも、このノードの値を読み取る必要が有る場合は、 Control キー(またはMacのCommand)を押したままノードをもう一度ドラッグします。これによりゲッター(getter)が作成されます。

../../../_images/visual_script22.png

この場合、値は データ・ポート から読み取ることができます。

変数

変数は、値を保持できるスクリプトにローカルなメモリコンテナです。この値は、前の手順で説明した方法を使用して、スクリプトの任意の関数または他のスクリプトから読み取ることができます。

変数を追加するには、メンバーパネルの Variables セクションの "+" ボタンを押します。新しい変数をダブルクリックして名前を変更します:

../../../_images/visual_script23.png

変数を右クリックすると、そのプロパティを設定できます:

../../../_images/visual_script24.png ../../../_images/visual_script25.png

上記からわかるように、変数の型と初期値、およびいくつかのプロパティヒントを変更できます。 「エクスポート」オプションを選択すると、ノードを選択するときにこの変数がインスペクターに表示されます。これにより、前の手順で説明した方法で他のスクリプトでも使用できるようになります。

../../../_images/visual_script28.png

スクリプトで変数を使用するには、キャンバスにドラッグしてゲッターを作成します:

../../../_images/visual_script26.png

同様に、Control (Mac 上の*Command*) キーを押したまま、セッター(setter)をドロップします:

../../../_images/visual_script27.png

シグナル

スクリプトで独自のシグナルを作成して使用することもできます。このためには、前の手順で変数に対して行ったのと同じ手順を実行します。ただし、 Signals は除きます:

../../../_images/visual_script29.png

右クリックメニューから信号を編集して、引数をカスタマイズすることもできます。

../../../_images/visual_script30.png

作成したシグナルは、組み込み済ノードのシグナルとともにインスペクターに表示されます。これにより、別の Scene Node の別のスクリプトから接続できます。

../../../_images/visual_script31.png

最後に、シグナルを送信するには、単にそれをキャンバスにドラッグするだけです:

../../../_images/visual_script32.png

シグナルの送信はシーケンス操作なので、シーケンス ポートから送信する必要があります。

更なるノードの追加

基本について説明したところで、キャンバスで使用できる大量のユーティリティノードについて説明しましょう。メンバーパネルの下に、使用可能なすべてのノードタイプの一覧が存在します:

../../../_images/visual_script33.png

Ctrl + F (MacではCommand + F) を使用すると、リストを検索できます。

いずれもシーンにドラッグできます。ノードとは異なり(例えば、インスペクタからプロパティをドラッグすると、自動的に編集されるノードにコンテキストを設定します)、これらは "contextual" 情報なしで追加されるので、手動で行う必要があります。

../../../_images/visual_script34.png

各ノードの内容については、クラス参照を確認できることに注意してください。前述のとおり、ノードの種類の概要を次に示します:

定数

定数ノードは、時間の経過と同じ値として役立つ値を提供するノードです。ほとんどの場合、整数または浮動小数点数です。

../../../_images/visual_script36.png

1 つ目は "定数" で、整数(例:42)から文字列(例:"Hello!")まで、任意の型の任意の値を定数として選択できます。一般に、 データ・ポート のデフォルトの入力値のために、あまりこのノードを使う事はありませんが、存在することを知っておくと便利です。

2つ目は、Godotのグローバル型の定数の長いリストを含むGlobalConstantノードです。そこには、キー名、ジョイスティックやマウスボタンなどを参照するためにいくつかの有用な定数を見つけることができます。

3つ目は、PI、E などの一般的な数学定数を提供する MathConstant です。

データ

データノードは、あらゆる種類の情報へのアクセスを扱います。Godotの情報は、これらのノードを介してアクセスされますので、使用する最も重要なものの一部であり、かなり多様です。

../../../_images/visual_script37.png

ここには多くの種類のノードがあるため、簡単に説明します:

アクション(Action)

アクションノードは、デバイスからの入力を処理する際に不可欠です。アクションの詳細については、(@TODO ACTION TUTE LINK)を読むことができます。次の例では、"move_right" アクションを押すと、コントロールが右に移動します。

../../../_images/visual_script38.png

エンジン・シングルトン(EngineSingleton)

エンジンシングルトンはグローバルインターフェイスです(つまり参照なしでアクセスできることを意味します。シーンノードとは異なり、常に使用可能です)。これらにはいくつかの目的がありますが、一般に、低レベルのアクセスまたはOS関連のアクセスに役立ちます。

../../../_images/visual_script39.png

空のスペースに接続をドラッグすると、関数を呼び出したり、プロパティを設定/取得したりするのに役立ちます:

../../../_images/visual_script40.png

ローカル変数(LocalVarSet/LocalVarGet)

これらは、グラフの一時的なストレージとして使用できるノードです。それらを使用するときは、すべて同じ名前と型を使用し、同じメモリを参照するようにしてください。

../../../_images/visual_script41.png

上に示すように、単純なゲッターとシーケンス化されたゲッター(設定にはシーケンスポートが必要)の2つのノードがあります。

シーンノード(Scene Node)

これはツリー内のノードへの参照にすぎませんが、実際のノードをシーン ツリーからキャンバスにドラッグして、このノードを使用する方が簡単です(これにより、ノードの作成と設定が行われます)。

セルフ(Self)

まれに、このシーンノードを引数として渡すことが望ましい場合があります。 これを使用して、関数を呼び出し、プロパティを設定/取得したり、ノードをシーンツリーからキャンバスにドラッグしたり(または、スクリプトを持っているノードをイベント化したり)することができます。

シーンツリー

このノードは、アクティブなシーンを含むシーンツリーを参照するため、シングルトンノードに似ています。 ただし、SceneTreeは、ノードがシーン内にありアクティブな場合にのみ機能します。そうでない場合、ノードにアクセスするとエラーが返されます。

SceneTreeでは、ストレッチオプションの設定、グループの呼び出し、タイマーの作成、または別のシーンの読み込みなど、多くの低レベルの処理が可能です。(ビジュアルスクリプトに)慣れるには良いクラスです。

プリロード(Preload)

これは、GDScriptのpreload()と同じ機能を実行します。このリソースをロードし、使用可能な状態に保持します。ノードをインスタンス化するのではなく、目的のリソースをファイルシステムドックからキャンバスにドラッグする方が簡単です。

リソースのパス(ResourcePath)

このノードは、選択可能なリソースへのパスを含む文字列を取得する単純なヘルパーです。これは、ディスクからデータをロードする関数で便利です。

コメント(Comment)

コメント ノードは、他のノードの周りに配置するサイズを変更できるノードとして機能します。フォーカスを取得しようとしたり、選択時にトップに持ち込まれたりしません。また、テキストを書き込むためにも使用できます。

../../../_images/visual_script42.png

フロー制御

フロー制御ノードを使用すると、通常は特定の条件に応じて、実行によって異なる分岐を取ることができます。

../../../_images/visual_script43.png

条件(Condition)

これはboolポートをチェックする簡単なノードです。 もし true なら、それは "true" シーケンスポートを経由します。false の場合は2番目のシーケンスポートです。 それらのいずれかに行った後、"done" ポートを経由します。 すべてのポートが使用されていない場合は、シーケンスポートを切断したままにしても問題ありません。

イテレータ(Iterator)

Godotの一部のデータ型(配列、辞書など)は反復処理が可能です。つまり、それが持つ各要素に対し、ちょっとしたコードを実行できることを意味します。

イテレータノードはすべての要素を通過し、それぞれについて、 "each" シーケンスポートを経由して、 "elem" データポートで要素を利用できるようにします。

完了すると、 "exit" シーケンスポートを経由します。

リターン(Return)

一部の関数は値を返すことができます。一般に、仮想ノードの場合、GodotはReturnノードを追加します。Returnノードは、関数を強制的に終了します。

シーケンス(Sequence)

このノードは、主にグラフを整理するのに役立ちます。順番にシーケンス ポートを呼び出します。

型キャスト(TypeCast)

これは使用頻度の高い便利なノードです。これを使用して、引数または他のオブジェクトを必要な型にキャストできます。その後、オブジェクトの出力をドラッグして完全に完成させることもできます。

../../../_images/visual_script55.png

スクリプトにキャストすることも可能で、完全なスクリプトのプロパティと関数を使用できます:

../../../_images/visual_script54.png

スイッチ(Switch)

スイッチノードは条件ノードに似ていますが、同時に多くの値に一致します。

While

これは、よりプリミティブな形式の反復です。 "cond" データポートの条件が満たされている限り、 "repeat" シーケンス出力が呼び出されます。

関数

関数(Function)は単純なヘルパーであり、ほとんどの場合確定的です。入力としていくつかの引数を取り、出力を返します。それらはほとんどシーケンスされません。

ビルトイン

組み込みヘルパーのリストがあります。リストは、GDScriptのものとほとんど同じです。それらのほとんどは数学関数ですが、他のものは便利なヘルパーになります。時間が出来たらリストを必ず確認してください。

タイプ別

これらは、基本的な型で使用できるメソッドです。たとえば、ドット積が必要な場合は、Vector3カテゴリの代わりに "dot" を検索できます。ほとんどの場合、ノードのリストを検索するだけで、より高速になります。

コール(Call)

これは汎用的な呼び出しノードです。直接使用されることはめったにありませんが、既に構成されているノードの空の領域にドラッグすることによって使用されます。

コンストラクター(Construct及びConstant)

これらはすべて、Godotの基本データ型を作成するために必要な関数です。たとえば、3つのfloatからVector3を作成する必要がある場合は、コンストラクターを使用する必要があります。

../../../_images/visual_script44.png

デストラクター(Destructor)

これは、コンストラクターの反対です。任意の基本型(Vector3等)をサブ要素に分離できます。

../../../_images/visual_script45.png

シグナルの出力(EmitSignal)

任意のオブジェクトからシグナルを出力します。一般に、キャンバスにシグナルをドラッグする方が適切に機能するので、あまり役に立ちません。

取得/設定(Get/Set)

汎用的な取得(Getter)/設定(Setter)ノード。インスペクタからプロパティをドラッグすると、ドロップ時に設定されて表示されるので、より適切に動作します。

待機(Wait)

Waitノードは、何かが起こるまで関数の実行を中断します(実際には、多くのフレームが再開されるまで渡すことができます)。既定のノードを使用すると、フレームが通過するまで待機したり、固定フレームまたは実行が再開されるまで一定の時間を待機したりできます。

譲渡(Yield)

このノードはスクリプトの実行を完全に中断し、関数は実行の再開に使用できる値を返します。

譲渡・シグナル待ち(Yield Signal)

Yieldと同じですが、特定のシグナルが放出されるまで待ちます。

インデックス(Index)

汎用インデックス演算子。頻繁に使用されるわけではありませんが、万が一に備えて用意してあります。

演算子

これらは主に加算、乗算、比較などの汎用演算子です。デフォルトでは、これらはほとんどすべてのデータ型を受け入れます(供給された型が演算子によって期待されるものと一致しない場合、実行時にエラーをスローします)。エラーをより迅速にキャッチし、グラフを読みやすくするために、常にオペレーターに適した型を設定することをお勧めします。

../../../_images/visual_script46.png

式ノード(Expression)

演算子の中で、 Expression ノードが最も強力です。うまく使用すれば、数学的だったりまたはロジック重いビジュアルスクリプトを大幅に簡素化できます。任意の式を入力すると、リアルタイムで実行されます。

式ノードは次のことができます:

  • カスタム入力に基づいて数学式と論理式を実行します (例: "a*5+b"、aとbはカスタム入力です):
../../../_images/visual_script47.png
  • ローカル変数またはプロパティにアクセスします:
../../../_images/visual_script48.png
  • Sin()、cos()、print()など、GDScriptで使用できる既存の組み込み関数のほとんどと、Vector3(x,y,z)、Rect2(..)などのコンストラクタを使用できます:
../../../_images/visual_script49.png
  • API関数の呼び出し:
../../../_images/visual_script50.png
  • 処理順序を考慮する場合は、シーケンスモードを使用してください:
../../../_images/visual_script51.png