組み込みコンポーネントについて

このページでは、Stingray に組み込まれた、さまざまな種類のコンポーネントの概要、およびこのリリースでのこれらのコンポーネントの機能を説明します。

コンポーネントとマネージャについて

Stingray の異なる各タイプのコンポーネントは、個別のコンポーネント マネージャによって処理されます。このマネージャは、どのエンティティにコンポーネントのインスタンスが割り当てられたかを追跡し、コンポーネントの各インスタンスで保持されるデータに内部的な一貫性があり、各フレームのコンポーネントに必要な更新が適用されているかを確認する役目を果たします。

たとえば、トランスフォーム コンポーネント マネージャは、トランスフォーム コンポーネントのインスタンスが割り当てられた、すべてのエンティティのリストを維持します。各トランスフォーム コンポーネントに、そのエンティティに対して有効な 3D 座標が含まれており、それらの値の移動、回転、およびスケールを処理していることを確認します。

これらのコンポーネント マネージャは、ゲームプレイ中に必要に応じて操作できるように、Lua に公開されています。たとえば、stingray.TransformComponent オブジェクトは、トランスフォーム コンポーネント マネージャを表します。

注: xxxComponent という名前の Lua オブジェクトはコンポーネント「マネージャ」を表し、個別のエンティティに割り当てられる個別のコンポーネントのインスタンスではありません。たとえば、stingray.TransformComponent オブジェクトは、「すべての」トランスフォーム コンポーネントを処理するマネージャで、エンティティに割り当てられる個別のコンポーネントではありません。つまり、これらのコンポーネント マネージャのいずれかによって提供される関数を呼び出すときには、通常、どのエンティティとコンポーネント インスタンスに影響を与えるかも指定する必要があることを意味します。

ゲームプレイ スクリプトでのこれらのマネージャへのアクセス方法と使用方法の詳細については、「ゲームプレイ中にエンティティを操作する」を参照してください。各マネージャによって公開される関数の詳細については、「Lua API リファレンス」のドキュメントを参照してください。

データ コンポーネント

データ コンポーネントは、データ値の保存と取得を処理します。たとえば、レンダリングとポスト効果設定を保存するためにシェーディング環境で使用されるコンポーネントは、すべての特殊なデータ コンポーネントです。ユーザ独自のカスタム コンポーネントを作成する場合も(「カスタム コンポーネントを作成する」を参照してください)、一種のデータ コンポーネントになります。

Stingray Editor の Property Editorパネル内でデータ コンポーネントの値を設定できます。また、stingray.DataComponent マネージャのインタフェースを使用して、ランタイムで Lua を介してこれらのデータ値を設定および取得できます(「ゲームプレイ中にエンティティを操作する」を参照してください)。さらに、Story Editor を使用して、特定の種類のデータ コンポーネント値をアニメートすることができます。

デバッグ名コンポーネント

デバッグ名コンポーネントは、次の点を除いてデータ コンポーネントと類似しています。

このコンポーネントは、Stingray Editor には公開されませんが、データ コンポーネントのように stingray.DebugNameComponent を使用して Lua から名前値を設定および取得できます。

スクリプト コンポーネントとフロー コンポーネント

スクリプト コンポーネントとフロー コンポーネントを使用すると、Lua スクリプト モジュールまたはフロー グラフ内で実行する「動作」にエンティティを関連付けることができます。「フローまたは Lua を使用してエンティティの動作を設定する」を参照してください。

タグ コンポーネント

タグ コンポーネントは、異なる種類のエンティティを区別するのに役立ちます。1 つまたは複数の異なるエンティティと文字列 ID タグを関連付けて、タグでエンティティを取得できます。

このコンポーネントは、Stingray Editor に公開され、Lua で stingray.TagComponent API を自由に使用してタグの割り当てとクエリーもできます。

各エンティティに割り当てることのできるタグ コンポーネントは 1 つだけですが、そのタグ コンポーネントは任意の数のタグを処理できます。

トランスフォーム コンポーネント

トランスフォーム コンポーネントは、エンティティの 3D の位置、回転、およびスケールを管理します。これは、Stingray Editor および Lua で stingray.TransformComponent マネージャを介して完全に公開されています。

また、トランスフォーム コンポーネントは、エンティティ間の「親子関係」を処理します。子の 3D トランスフォームがその親に対して相対的に設定されている階層に、エンティティを相互にリンクすることができます。親の 3D トランスフォームへの変更は、すべてのリンクされた子にも影響を与えます。このトランスフォーム コンポーネントの使用は、現在 Lua のみで公開されています。

各エンティティには、1 つのトランスフォーム コンポーネントのみを割り当てることができます。各エンティティは一度に 1 つの親エンティティにのみリンクできますが、任意の数の子エンティティにリンクすることができます。

ユニット コンポーネント

ユニット コンポーネントは、エンティティとユニット リソースを関連付けます。ユニット コンポーネントを持つエンティティをスポーンまたはスポーン解除する場合、そのユニット リソースのインスタンスも自動的にスポーンまたはスポーン解除されます。

ユニット コンポーネントは Stingray エディタで完全に公開されています。ユニット コンポーネントをエンティティに追加することができ、Property Editor パネルを使用してその関連付けられたユニット リソースを設定できます。また、Lua では stingray.UnitComponent マネージャを使用してアクセスすることもできます。

3D ワールドでのユニットの配置、回転、スケールは、そのエンティティのトランスフォーム コンポーネントによって決定されます。ユニット コンポーネントを使用する場合、通常、そのエンティティもトランスフォーム コンポーネントを使用して設定する必要があります。

各エンティティには、1 つの関連付けられているユニットがあり、ユニット コンポーネントを 1 つだけを割り当てることができます。

注: 最終的に、Stingray 内で現在ユニットが管理するすべての項目(メッシュ、シーン グラフ、物理アクターなど)を、エンティティによって直接管理できるようにすることを計画しています。サポートする異なるタイプのコンポーネントをさらに増やしてエンティティ システムを機能拡張していきますが、短期的にはユニット コンポーネントにより、エンティティが可視ゲーム オブジェクトを管理する実用的な方法が提供されます。

その他のコンポーネント

Lua API を使用して表示すると、そのマネージャも公開されている、その他の種類のコンポーネントがあることに気付く場合があります。しかし、これらのコンポーネントはエディタまたは Lua を使用して簡単に作成できないデータに依存しているため、このリリースではまだ有用とは言えません。これには、次のものが含まれます。