Godot Engine 4.0 ドキュメント - ステップバイステップ チュートリアル - サンプルの作成

この記事は Google 翻訳による英語翻訳の結果であり、これに DrGraph がいくつかの修正を加えたものです。英語のオリジナルページ:

インスタンスの作成 — Godot Engine (安定版) ドキュメント (英語)

インスタンスの作成¶

前のセクションでは、シーンが単一のノードをルートとして、ツリー構造に編成されたノードのコレクションであることを見てきました。プロジェクトを任意の数のシーンに分割できます。この機能は、ゲームのさまざまなコンポーネントを分解して整理するのに役立ちます。

シーンは必要なだけ作成し、 .tscn拡張子「Text Scene」を付けてファイルとして保存できます。tabel.tscn前のレッスンのファイルは例です。これらのファイルにはシーンの内容に関する情報がパックされているため、これらのファイルを「パッケージ化されたシーン」と呼びます。

以下はボールの例です。これは、 Ball という名前のルート RigidBody2D ノードSprite2Dノード、および ボールが壁に落ちて跳ね返るようにするCollisionShape2Dで構成されます。

シーンを保存すると、それは青写真のように機能し、他のシーンで何度も複製できます。このようにテンプレートからオブジェクトをコピーすることをインスタンス化と呼びます。

前のセクションで説明したように、インスタンス化されたシーンはノードのように動作します。エディターはデフォルトでコンテンツを非表示にします。Ball をインスタンス化すると、Ball ノードのみが表示されます。各重複に一意の名前が付いていることにも注目してください。

Ball シーンのすべてのインスタンスは、同じ構造とプロパティで始まりますball.tscnただし、インスタンスの跳ね返り方、重み、ソース シーンで公開されているプロパティを変更するなど、個々のインスタンスを個別に変更できます。

実際のところ¶

インスタンス化を実際に使用して、Godot でどのように機能するかを見てみましょう。用意したサンプル プロジェクト instancing_starter.zipをダウンロードしてください。

コンピュータ上でアーカイブを解凍します。インポートするにはプロジェクト マネージャーが必要です。Godot を開いてプロジェクト マネージャーにアクセスするか、すでに Godot を開いている場合は、[プロジェクト] -> [終了] をクリックしてプロジェクト リストに移動します(macOS では Ctrl + Shift + Q、Ctrl + Option + Cmd + B)

プロジェクト マネージャーで、[インポート]ボタンをクリックしてプロジェクトをインポートします。

表示されるポップアップで、「参照」ボタンをクリックし、解凍したフォルダーに移動します。

project.godotファイルをダブルクリックして開きます。

最後に、「インポートと編集」ボタンをクリックします。

プロジェクトには、main.tscnボールが衝突する壁を含む と の2 つのパックされたシーンが含まれていますball.tscnメインシーンがmain.tscn自動的に開きます。

ボールをメインノードの子として追加しましょう。シーン ドックでマスター ノードを選択します。次に、シーン ドックの上部にあるリンク アイコンをクリックします。このボタンを使用すると、現在選択されているノードの子としてシーン インスタンスを追加できます。

球体シーンをダブルクリックしてインスタンス化します。

ボールがビューポートの左上隅に表示されます。

それをクリックしてビューの中心にドラッグします。

F5 (macOS では Cmd + B) を押してゲームをプレイします。落ちていくのが見えるはずです。

ここで、Ball ノードのインスタンスをさらに作成したいと思います。ボールが選択された状態で、(macOS の場合は Ctrl-DCmd-D) を押して、複製コマンドを呼び出します。クリックしてドラッグし、新しいボールを別の場所に移動します。

シーン内に複数のオブジェクトが存在するまで、このプロセスを繰り返すことができます。

もう一度ゲームをプレイしてください。各ボールが独立して落下するのが確認できるはずです。それがインスタンスの役割です。それぞれはテンプレート シーンの独立したレンディションです。

シーンとインスタンスの編集¶

他にもたくさんの例があります。この機能を使用すると、次のことが可能になります。

  1. インスペクターを使用すると、他のボールに影響を与えずに 1 つのボールのプロパティを変更できます。

  2. ball.tscnシーンを開いてそこにある Ball ノードを変更することで、各 Ball のデフォルトのプロパティを変更します。保存後、プロジェクト内の Ball のすべてのインスタンスの値が更新されます。

注: インスタンスの属性を変更すると、対応するパッケージ化されたシーンの値が常にオーバーライドされます。

これを試してみましょう。ball.tscnBall ノードを開いて選択します。右側のインスペクターで、Physicsmaterial プロパティをクリックして展開します。

2数値フィールドをクリックし、2と入力し、 を押して、その Bounce プロパティを Enter に設定します。

F5 を押してゲームをプレイすると、すべてのボールがはるかに跳ね返るようになっていることがわかります。Ball シーンはすべてのインスタンスのテンプレートであるため、これを変更して保存すると、すべてのインスタンスがそれに応じて更新されます。

次に、単一のインスタンスを微調整してみましょう。ビューポートの上にある適切なタブをクリックして、メイン シーンに戻ります。

インスタンス化された Ball ノードを選択し、その Gravity Scale 値を に設定します10

調整したプロパティの横に灰色の「元に戻す」ボタンが表示されます。

このアイコンは、ソース パッケージ化シーンの値を上書きしていることを示します。元のシーンでプロパティを変更した場合でも、値のオーバーライドはインスタンスに残ります。復元アイコンをクリックすると、プロパティが保存されたシーンの値に復元されます。

ゲームを再実行すると、ボールが他のボールよりもはるかに速く落下していることがわかります。

注: 1 つのインスタンスの値を変更するとPhysicsMaterial、他のすべてのインスタンスに影響します。PhysicsMaterialこれはリソースであり、リソースはインスタンス間で共有されるためです。リソースをインスタンスに固有にするには、インスペクターでリソースを右クリックし、コンテキスト メニューで [固有にする] をクリックします。

リソースは Godot ゲームのもう 1 つの重要な部分ですが、これについては後のレッスンで説明します。

デザイン言語としてのシーンインスタンス¶

Godot のインスタンスとシーンは、このエンジンを際立たせる優れた設計言語を提供します。私たちはこのコンセプトに基づいて Godot をゼロから設計しました。

Godot を使用してゲームを作成する場合は、Model-View-Controller (MVC) やエンティティ関係図などのアーキテクチャ コード パターンを放棄することをお勧めします。代わりに、プレイヤーがゲーム内で目にする要素を想像することから始めて、それに基づいてコードを構築することができます。

たとえば、シューティングゲームを次のように分解できます。

ほぼすべての種類のゲームについて、このような図を思いつくことができます。プレイヤーの視点から見ると、各四角形はゲーム内で表示されるエンティティを表します。矢印は、どのシーンがどのシーンを所有しているかを示します。

図を作成したら、そこにリストされている要素ごとにシーンを作成してゲームを開発することをお勧めします。シーン ツリーは、コード内で作成するか、インスタンス化を使用してエディタで直接作成します。

プログラマは、抽象的なアーキテクチャを設計し、そこにコンポーネントを適合させることに多くの時間を費やす傾向があります。シナリオベースの設計により、開発がより迅速かつ簡単になり、ゲーム ロジック自体に集中できるようになります。ほとんどのゲーム コンポーネントはシーンに直接マップされるため、シーン インスタンスに基づいたデザインを使用すると、追加のアーキテクチャ コードがほとんど必要なくなります。

以下は、多くのアセットとネストされた要素を含むオープンワールド ゲームのシーン グラフの例です。

まず部屋を作成することから始めると想像してください。ユニークな家具の配置で、さまざまな部屋のシーンを作ることができます。後で、内部で複数の部屋インスタンスを使用する家のシーンを作成できます。多数のインスタンスの家と、城を配置する広い地形を備えた城を作成します。これらはそれぞれ、1 つ以上のサブシーンをインスタンス化するシーンです。

後で、衛兵を表すシーンを作成し、城に追加できます。これらはゲーム世界全体に間接的に追加されます。

Godot を使用すると、より多くのシーンを作成してインスタンス化するだけなので、このようにゲームを反復するのが簡単です。私たちは、プログラマー、デザイナー、アーティストが同様に使用できるエディターを設計しました。一般的なチーム開発プロセスには、2D または 3D アーティスト、レベル デザイナー、ゲーム デザイナー、アニメーターが関与し、全員が Godot エディターを使用します。

概要¶ _

ブループリントからオブジェクトを生成するプロセスであるインスタンス化には、多くの便利な用途があります。シナリオを使用すると、次のことが可能になります。

  • ゲームを再利用可能なコンポーネントに分割する機能。

  • 複雑なシステムを構築およびパッケージ化するためのツール。

  • ゲームプロジェクトの構造を自然な方法で考えるための言語。

おすすめ

転載: blog.csdn.net/drgraph/article/details/130792671