カスタム コンポーネントを作成する

エンティティ システムの目的は、ユーザ独自の種類のコンポーネントを簡単に作成し、レベル デザイナーが作業するためにそれらを Stingray Editor に公開し、プロジェクトのゲームプレイ コードでランタイムでそれらを処理できるようにすることです。

このリリースでは、任意のデータ値を処理するユーザ独自のコンポーネントを設計することができます。

概要: カスタム コンポーネントを作成して使用するには

  1. プロジェクトのソース フォルダ内に新しい .component リソースを作成して、新しいコンポーネントを定義します。詳細については、以下のセクションを参照してください。

    ヒント: Script Editor を使用して、プロジェクトの .component ソースを開いて編集します。

  2. Stingray Editor を再起動し、プロジェクトをロードします。(プロジェクト内で使用可能なコンポーネントのリストは、まだ自動的には更新されません)。

  3. あらゆる組み込みコンポーネントを割り当てる場合と同じ方法で、エンティティに新しいコンポーネント タイプを割り当てます。「エンティティにコンポーネントを割り当てる」を参照してください。

  4. Property Editor でそのエンティティにコンポーネントのデータ値を設定します。

  5. レベルにエンティティを配置するか、Lua ゲームプレイ コードで動的にスポーンします。

  6. Lua ゲームプレイ コードでは、エンティティのコンポーネントにアクセスし、その値を読み取るまたは書き込むために、stingray.DataComponent マネージャを使用することができます。「ゲームプレイ中にエンティティを操作する」を参照してください。

コンポーネントのサンプル

ユーザ独自のカスタム .component リソースの作成方法を理解する最適な方法は、実施サンプルから開始することです。

シェーディング環境で提供されるそれぞれのグローバル ライティングとポスト効果は、データ コンポーネントでラップされています。ユーザ独自のタイプのデータ コンポーネント用のモデルとしてこれらのサンプルを使用して、そのデータ コンポーネントとエディタが処理できる異なる種類のフィールドのサンプルを確認できます。

core/stingray_renderer/shading_environment_components の下にある .component ファイルを参照してください。

.component 構造

次のブロックは、.component リソースのサンプルを示しています。このサンプルは、2 つのデータ数値を格納するデータ コンポーネントを定義します。

export = "#component"
types = {
    component = {
        type = ":struct"
        implements = {
            "core/types/component" = true
        }
        fields = {
           str_data = {
                type = ":number"
                default = 18
                min = 1
                max = 200
                editor = {
                    label = "Strength"
                    step = 1
                }
            }
           tough_data = {
                type = ":number"
                default = 10
                min = 1
                max = 200
                editor = {
                    label = "Toughness"
                    step = 1
                }
            }
        }
        editor = {
            category = "Custom component"
            priority = 1200
            icon = "signal"
        }
        metadata = {
            name = "My Game Combat Stats"
            component = "data"
            tags = ["custom_combat_stats"]
        }
    }
}

この構造のほとんどは、ユーザ独自のコンポーネントで同じままにしておく必要があります。次のセクションでは、カスタマイズする要素について説明します。

fields

このセクションでは、コンポーネントが処理するデータを定義します。

各フィールドは、そのフィールドに格納されているデータの説明と、名前(上記の例では str_data)を関連付けます。この説明には、フィールド(文字列、数値、ブール値、リソース名、カラーなど)に格納されるデータ タイプ、既定値、許容値、フィールドの Property Editor パネルでの表示方法を Stingray Editor に指示するフィールドに関するメタデータが含まれます。

これらのデータの説明(および .component リソース タイプ自体)は、内部データ入力システムを使用しています。今後のリリースでは、このエンティティとタイプ システムの安定性およびより一般的な有用性を向上させ、このタイプ システムの機能、すべての組み込みタイプの詳細、さらに機能を拡張してユーザ独自のカスタム データ タイプを作成する方法に関して完全な詳細を提供する予定です。

ここでは、ユーザ独自のコンポーネントの作成を試みる場合、組み込みシェーディング環境コンポーネントによって提供された実施サンプルを使用するのが最適です。Property Editor で各シェーディング環境コンポーネントに設定できる値の種類を確認し、対応する .component リソースでこれらのフィールドを設定する方法を確認することで、カスタム コンポーネントに同じタイプのデータを処理させる方法を把握できるはずです。

editor

このセクションには、Stingray Editor の Property Editor パネルにコンポーネントを表示する方法を設定するメタデータが提供されます。

category

これはコンポーネントの表示名です。これは、エンティティに追加できる使用可能なコンポーネントのリスト、および Property Editor のツリー ビュー内のエンティティ コンポーネントのリストで、コンポーネントを特定するために使用します。または、ツリー ビューでこのコンポーネントによって管理されるデータ フィールドをグループ化するために使用されます。

priority

Property Editor 内のこのコンポーネントの設定の配置を、同じエンティティに割り当てられているその他のコンポーネントに相対的にコントロールします。優先順位が最も低い値を持つコンポーネントは、パネルの上部に表示されます。

icon

Property Editor のツリー ビューで、このコンポーネントのカテゴリ名の横に表示されるアイコンをカスタマイズします。これは次のページに記載された Web アプリケーション アイコンの名前を使用します。http://fontawesome.io/icons/

metadata

このセクションでは、コンポーネントに関するメタデータが提供されます。

name

エディタは、カスタム コンポーネントのタイプを識別するため、UI のこの名前を使用します。この名前がすべての種類のコンポーネントの中で一意であることを確認します。一意でないと、識別する方法がなくなります。他のコンポーネント名との競合を回避するのに最適な方法は、プロジェクト名、またはプラグイン名をコンポーネント名に含めることです。

component

この値は、カスタム コンポーネントを処理するために、どの組み込みコンポーネント マネージャ システムが使用されるかを決定します。このリリースでは、カスタム コンポーネントがデータ コンポーネントとして処理されるようにするには、常に data をここで選択します。

tags

コンポーネント タイプのインスタンスを特定および取得するために使用できるタグのリストです。現在、これはシェーディング環境コンポーネントを特定するために、内部的にのみ使用されています。カスタム コンポーネントでは、shading_environment タグをコンポーネントをより明確に説明するタグで置換するようにします。