プロジェクトでエンティティを使用する

注: Stingray のエンティティは、カスタムの構築ブロックを作成および再利用するために、簡単に拡張可能なモジュール方式のシステムを提供することを目的としています。現時点では、エンティティに対するサポートは開始されたばかりで、主にシェーディング環境とポスト エフェクトのサポートが中心となっています。このセクションで提供される情報を使用して、他の目的でエンティティ システムの使用を自由に試すこともできます。しかし、現在のところ、Stingray のほとんどのワークフローは、エンティティではなく、ユニットの使用に基づいていることに注意してください。ユニットとエンティティについて」も参照してください。

エンティティはプロジェクトで使用できる構築ブロックで、独自のデータ、動作、相互作用の組み合わせを持つ複雑なオブジェクトを設定するのに使用できます。

エンティティを使用する目的とは?

エンティティ システムの目標は、プロジェクトで必要となるあらゆる種類のオブジェクトをモデル化するのに十分に柔軟でオープンであることです。

Stingray の内部では、いくつかのコア機能とワークフローが既にエンティティを中心にして作成されています。たとえば、新しいレベルを作成するたびに、シェーディング環境とポスト エフェクトで使用されるレンダリング設定を処理するエンティティが提供されます。

さらに、ユーザ独自の種類のゲーム オブジェクトを設定するために、エンティティ システムを直接使用することもできます。このリリースでは、エンティティ システムは、主に数値、ブール、文字列、リソース名、3D 座標、カラーなどの任意のデータ値を格納するエンティティを作成する場合に役立ちます。

エンティティはモジュール方式

すべてのエンティティは、基本的に多様な種類のコンポーネントを保持するコンテナです。

各コンポーネントには、1 つの独自のジョブがあります。このジョブには、任意の種類のデータ保存、3D メッシュの管理、その他のネストされたエンティティ階層の維持、Lua コードまたはフロー グラフを実行してイベントに応答することなどがあります。

異なる種類のコンポーネントを統合して、独自のデータ(多様なプロパティ値、メッシュ、動作など)を設定することで、エンティティを組み立てます。このようにして、必要なコンポーネントと動作のみが含まれる、ユーザ独自の種類のエンティティを作成することができます。

エンティティにコンポーネントを割り当てる」も参照してください。

エンティティは効率的

エンティティは、選択したコンポーネントの組み合わせから構築されるため、比較的軽量となる傾向があります。エンティティで物理特性または 3D メッシュなどを処理する必要がない場合は、それらに関連したコンポーネントをエンティティに割り当てる必要はありません。したがって、各エンティティは割り当てられたコンポーネントを処理するのに必要な最小限のメモリのみを消費し、不要な追加の「オーバーヘッド」を確保しません。

さらに、コンポーネントの各タイプは、個別のサブシステムによって管理されます。それぞれのコンポーネント マネージャは、該当するコンポーネントのインスタンスが割り当てられたエンティティのみを認識し、各マネージャにはこれらのエンティティに関連するすべてのデータが保持されます。このように、コンポーネント マネージャを分離することで、マネージャは各自の特定のジョブにできるだけ効率的に集中することができます。

エンティティは拡張可能

Stingray では、ユーザ独自のエンティティにすぐに割り当てられる、いくつかの組み込みコンポーネントが準備されています。(このリリースでは、Stingray Editor からランタイムのゲームプレイまでの完全なエンドツーエンドのワークフローを持つコンポーネント セットの数は非常に限られています。将来のリリースでは、組み込みコンポーネント タイプの数を増やし、それらの設定方法も容易になる予定です)。

作成するプロジェクトのタイプによっては、エンティティを使用して、組み込みコンポーネント セットが処理できるものとは異なる種類のジョブを実行したり、異なる種類のデータを管理することなどが必要になる場合があります。

これを実行するために、ユーザ独自のカスタム タイプのコンポーネントを作成できます。これにより、プロジェクトのニーズに非常によく適合したゲーム エンティティをカスタマイズすることができます。

カスタム コンポーネントを作成する」も参照してください。

エンティティは再利用可能

新しいエンティティの定義を、以前に設定したその他の種類のエンティティに基づいて設定することができます。これで、新しいエンティティは、基本となるエンティティに含まれている同じコンポーネントと設定をすべて継承できます。また、これらの継承した設定をオーバーライドして、新しいコンポーネントを追加することもできます。

これは、コンポーネントや設定の同じセットを再利用するために、エンティティの定義を複製する必要がないことを意味します。各エンティティの定義は必要な回数だけ再利用することができ、使用するたびにさらにカスタマイズできます。

これにより、エンティティ定義の階層が作成できます。それぞれの定義は継承されたアセットから取得するコンポーネントと設定に依存します。

各エンティティは、その継承されたエンティティに永続的に接続されていることに注意してください。継承された設定を取得する場合、その値はオーバーライドされていない限り、常に継承されたエンティティから取得されます。したがって、エンティティ階層のルートで設定を変更すると、その値を継承する他のすべてのエンティティで、その値が自動的に変更されます。

継承されたアセットを設定または除去する」および「オーバーライドを適用または破棄する」も参照してください。