ゲームにロードする各リソース パッケージは、拡張子が .package の SJSON ファイル内で定義します。各パッケージ ファイルにはオブジェクトのリストが格納されています。このリスト内の各オブジェクトのキーはリソース タイプ、各オブジェクトの値はリソース名のリストを表します。
たとえば、次のようになります。
level = [ "levels/city" "levels/town" ] lua = [ "lua/boot" "lua/game" "lua/freeflight" "lua/thread" ]
個々のリソースのリストにはファイル拡張子が表示されないことにご注意ください。これは、各リソース リストが特定のリソース タイプのみを参照しているためです。たとえば、上記のスニペットでは、level リスト内でディスク上の levels/city.level ファイルが指定されているため、Stingray は levels/city リソースがこのファイルのみを参照することを認識しています。
他の種類のリソースなどのパッケージ ファイルは、プロジェクト ソース フォルダ内の任意の場所に存続できます。ユーザが指定するリソースのすべての名前は、.package ファイルの場所に対してではなく、プロジェクトのルートに対して常に相対的である必要があります。
Stingray がパッケージ内で定義されたリソースをロードするときに、このリソースが参照している他のすべてのリソースが自動的にロードされます。したがって、levels/city リソースがロードされる場合などは、Stingray エディタ内のこのレベルに配置されたすべてのユニットおよびテクスチャも自動的にロードされます。
注: 従属関係の自動追跡が適用されるのは、ロード中のリソース内に明示的に記録されている依存関係のみです。これに Lua スクリプトのみが参照するリソースは含まれません。したがって、このレベルにまだ配置されていない新しい種類のユニットをスポーンするために Lua コードが必要な場合は、いずれかのパッケージ定義にこのユニット リソースを追加して、このリソースをランタイムで使用できるようにする必要があります。
パッケージ ファイル内でワイルドカード文字 * を使用して、任意の文字列と一致させることができます。このワイルドカードは、各リソース名またはリソース タイプに最大で 1 回含めることができます。
リソース名を定義するときはいつでもワイルドカードを使用できます。たとえば、次のようになります。
level = ["levels/jungle/*"]
この行を指定すると、このパッケージをロードするときに、levels/jungle フォルダ内のすべてのレベルがロードされます。(これらのレベルで使用されるその他のすべてのコンテンツもロードされます。)
この方法は、一般に、ブート パッケージ内のゲームにすべての Lua スクリプトをロードする場合に使用されます。これらのスクリプトはサイズが小さく、ゲーム全体で必要になることが多いためです。
lua = ["*"]
リソースの type を指定するときに、ワイルドカードを使用することもできます。たとえば、次のようになります。
* = ["*"]
このスニペットを指定すると、パッケージがロードされるときに、すべてのタイプのすべてのリソースがメモリにロードされます。ただし、これらのリソースがソース フォルダに格納されていることが条件となります。
この行をブート パッケージに配置すると、パッケージへのリソースの配布方法に悩む必要がなくなるので、起動時間と実行時間を短縮するのに役立ちます。ただし、すべてのデータを一度にロードする方法の場合は、ゲームの拡張に伴い、ブート時間が大幅に低下して、最終的にゲームがメモリ不足になります(特に、携帯電話など、使用可能なメモリ サイズが小さいプラットフォームの場合)。
パッケージ ファイルには、リソースのリストの他に、次に示す特殊なキーを格納することもできます。各キーは、各パッケージ ファイル内に 1 回のみ格納できます。
IGNORE_DEPENDENCIES = <boolean>
このフラグは、このパッケージ内にリストされたリソースで使用されるすべてのリソースを Stingray がロードするかどうかを決定します。上記の「従属関係の処理」を参照してください。このオプションを true に設定すると、このファイル内で明示的にリストされているリソースのみがロードされます。
ADD_PACKAGES = []
このキーの値内で .package リソースを指定すると、これらのパッケージ内でリストされているすべてのリソースが現在のパッケージに自動的に追加されます。
SUBTRACT_PACKAGES = []
このキーの値内で *package リソースを指定すると、これらのパッケージ内でリストされているすべてのリソースが現在のパッケージから除去されます。
これは、すべてのレベルで使用されるリソースが含まれている共通パッケージを設定する場合に役立ちます。後で、使用レベルの各パッケージからこのパッケージを取り除くことができます。共通リソースは常にロードされるため、個々のパッケージに含める必要はありません。
BUNDLE = <boolean>
この値を false に設定した場合、このパッケージからバンドルは生成されません。これは、組織専用のパッケージを定義する場合(SUBTRACT_PACKAGE 設定と併用する場合など)に役立ちますが、ゲーム内で独立して使用する必要はありません。