インスタンス

はじめに

1つのシーンを作成してノードを追加すると、小規模なプロジェクトでは機能しますが、プロジェクトのサイズと複雑さが増すにつれて、ノードの数がすぐに管理できなくなる可能性があります。これに対処するために、Godot ではプロジェクトを任意の数のシーンに分割することが許されています。これにより、ゲームのさまざまなコンポーネントを整理するのに役立つ強力なツールが提供されます。

シーンとノードでは、シーンはツリー構造で編成されたノードのコレクションであり、単一のノードがツリールートであることを学びました。

../../_images/tree.png

必要な数のシーンを作成し、ディスクに保存できます。この方法で保存されたシーンは「パックされたシーン」と呼ばれ、 .tscn の拡張子を持ちます。

../../_images/instancingpre.png

セーブしたシーンは、他のノードと同じように別のシーンでインスタンス化できます。

../../_images/instancing.png

上の図では、シーンBがインスタンスとしてシーンAに追加されました。

インスタンス化の例

インスタンス化のしくみを学ぶには、サンプル プロジェクトをダウンロードして始めましょう: instancing.zip

このプロジェクトを任意の場所で解凍します。次に、Godotを開き、[インポート]ボタンを使用してこのプロジェクトをプロジェクト管理者に追加します:

../../_images/instancing_import.png

抽出したフォルダを参照し、その中にある「project.godot」ファイルを開きます。これを行うと、新しいプロジェクトがプロジェクトの一覧に表示されます。[編集]ボタンを押してプロジェクトを編集します。

このプロジェクトには、「Ball.tscn」と「Main.tscn」の2つのシーンがあります。ボール シーンはRigidBody2Dを使用して物理動作(のシミュレート)を提供し、メイン シーンにはボールが衝突する障害物のセットがあります (StaticBody2Dを使用)。

../../_images/instancing_ballscene.png ../../_images/instancing_mainscene.png

Main シーンを開き、ルート ノードを選択します:

../../_images/instancing_mainroot.png

Main の子として Ball シーンのインスタンスを追加したいと思います。「リンク」の形のボタン(ホバーテキストに「シーンファイルをノードとしてインスタンス設定する」と表示)をクリックし、 Ball.tscn ファイルを選択します。

../../_images/instancing_linkbutton.png

ボールは画面領域の左上隅に配置されます(画面座標では (0,0) です)。ボールをクリックし、シーンの上部中央付近にドラッグします:

../../_images/instancing_placeball.png

「再生」を押して、ボールが画面の下部に落ちるのを確認します:

../../_images/instancing_playbutton.png

複数のインスタンス

シーンに必要な数のインスタンスを追加するには、[インスタンス]ボタンをもう一度使用するか、ボール インスタンスをクリックして [複製](またはCtrl-D)を押します:

../../_images/instancing_multiball.png

シーンを再び実行すると、ボールのすべてが落下します。

../../_images/instancing_multiball.gif

インスタンスの編集

Ball のシーンを開いて、下向きの矢印をクリックし、新規 PhysicsMaterialを選んで、 PhysicsMaterial を追加します。

../../_images/instancing_physicsmat1.png

Then, expand the material by clicking on it, and set the Bounce property to 1.

../../_images/instancing_physicsmat2.png

Playを押してください。インスタンス化された全部のボールがより弾むようになりました。インスタンス化されたボールはセーブした同じシーンに基づくので、そのシーンを変更するとすべてのインスタンスに影響を与えます。

個々のインスタンスを調整することもできます。 Bounce の値を``0`` に戻して、 Main シーンでインスタンス化したボールを一つ選んでください。 PhysicsMaterial のようなリソースはデフォルトでインスタンス間で共有されます。したがって、それをユニークにする必要があります。下向きの矢印を押して、Make Uniqueを選んでください。その Bounce を``1`` にセットしてPlayを押してください。

../../_images/instancing_property.png

調整されたプロパティの横に灰色の「元に戻す」ボタンが表示されます。 このボタンが表示されている場合は、インスタンス化されたシーンのプロパティを変更して、保存されたシーンの値を上書きすることを意味します。 そのプロパティが元のシーンで変更されても、カスタム値は残ります。 元に戻すボタンを押すと、保存されているシーンの値にプロパティが復元されます。

結論

同じオブジェクトのコピーを作りたいとき、インスタンス化は便利です。またGDScriptを使ってコードでインスタンスを作ることもできます。インスタンスを御覧ください。