ランタイムの条件に応じて、ゲームで異なるバージョンのリソースをロードして使用することが必要な場合があります。たとえば、ゲームを複数の言語に翻訳する場合、プレイヤーが選択した現在の言語に応じて、異なるテクスチャの表示または異なるアニメーションの再生が必要な場合があります。あるいは、現在ゲームを実行しているプラットフォームに応じて、異なるバージョンのリソースを使用することが必要な場合もあります。
Stingray にはリソース選択メカニズムが組み込まれており、指定した設定に基づいて、ロードするリソースごとに最適なバージョンを自動的に選択できます。
ローカライズのメカニズムは「オーバーライド」の基本概念に基づいています。オーバーライドにより、エンジンが特定のリソースを要求している場合に、別のリソースで自動的に置き換えるように指定できます。たとえば、次のオーバーライドがアクティブになっているとします。
エンジンが larch_03 をスポーンしようとすると、代わりに pine_05 がスポーンされます。そのため、カラマツ(larch)のレベルがマツ(pine)のレベルとして表示されます。
リソースをインスタンス化すると(たとえば、ユニットをスポーンすると)、オーバーライドが発生します。オーバーライドは遡及的に適用されないため、オーバーライドが有効になる前にスポーンされたカラマツは、オーバーライドが有効になった後もカラマツのままです。
オーバーライド中のリソースはマツになります。これらの名前を要求すると、trees/larch_03 ではなく、trees/pine_05 と表示されます。必要なすべてのアクター、ボーン、メッシュなどがオーバーライドしているリソースの代替として機能することの確認は、ゲーム開発者が行う必要があります。
オーバーライドできるのは、個々のリソースのみであることにご注意ください。フォルダはオーバーライドできません。
別のリソースをオーバーライドするリソースを作成するには、スクリプト内でそのリソースを明示的に指定するのが最も効率的です。
stingray.Application.set_resource_override("unit", "trees/larch_03", "trees/pine_05")
このタイプのオーバーライドは、どのリソースで、他のどのリソースをオーバーライドするのかをスクリプトで完全にコントロールできるため、極めて柔軟性が高く、強力です。この方法は完全にスクリプトベースで行われるため、パッケージのコンパイル方法に影響を与えません。そのため、他のリソースをオーバーライドするのに使用するリソースは、.package ファイルに手動で追加する必要があります。
サフィックス オーバーライド システムでは、リソースのサフィックスに基づいて自動的なオーバーライドを作成します。この方法はスクリプト処理方式のオーバーライドほど柔軟ではありませんが、利便性が高く、静的なシステムであるため、バインディング システムで認識することができます。
サフィックス オーバーライドは .stingray_project ファイル内で指定します。以下に例を示します。
data_compiler = { resource_overrides = [ {suffix = ".win32", platforms = ["win32"]} {suffix = ".ps4", platforms = ["ps4"]} {suffix = ".xb1", platforms = ["xb1"]} {suffix = ".ios", platforms = ["ios"]} {suffix = ".android", platforms = ["android"]} {suffix = ".noblood", flags = ["noblood"]} {suffix = ".4k", flags = ["4k"]} {suffix = ".color-blind", flags = ["color-blind"]} ] }
サフィックス オーバーライドがアクティブになっていて、プロジェクトにサフィックス付きのリソースが含まれている場合は、基本リソースからサフィックス付きリソースへのオーバーライドが自動的に作成されます。
したがって、.ps4 サフィックスがアクティブになっていて、rocks/big_white_rock.unit および rocks/big_white_rock.ps4.unit の両方のリソースがエンジンに含まれている場合は、
のオーバーライドが自動的に作成されます。
これまで、サフィックス オーバーライドの先頭にはピリオド(.)が付いていましたが、これは必須でなくなりました。サフィックスには -hifi などの任意の文字列を指定できます。
サフィックス オーバーライドには 2 つの種類(プラットフォーム サフィックスとフラグ サフィックス)があります。特定のプラットフォームのデータをコンパイルする場合は、プラットフォーム サフィックスが自動的に適用されます。たとえば、次のオーバーライドがあるとします。
{suffix = ".mobile", platforms = ["ios", "android"]}
iOS または Android 用にコンパイルする場合は、常にこのオーバーライドがアクティブになります。
フラグ サフィックスの場合は、コンパイル時のフラグの状態を指定できます。
--resource-flag-true noblood --resource-flag-false 4k
こうすると、フラグが true または false にハードマッピングされ、これらの値に対応するリソースのみがバンドルに追加されます。
コンパイル時に true または false に設定されないフラグは、動的フラグとみなされます。この例では、両方のリソース バリアントがバンドルに追加されます。フラグの設定とクリアを行うことで、ランタイムで切り替えることができます。
stingray.Application.set_resource_override_flag("color-blind", 100)
これにより、color-blind フラグが有効になり、優先順位が 100 に設定されます。優先順位が関係するのは、複数のランタイム リソースが適用される可能性がある場合です。優先順位が最高のオーバーライドが優先します。基本リソース(ランタイム フラグが付いていないリソース)は、優先順位が 0 とみなされます。スクリプトによって設定された明示的なオーバーライドは、スクリプト処理方式のオーバーライドよりも常に優先します。
簡潔にするために、リソースに複数のサフィックスを付けることはできません。対応するサフィックスは最大で 1 つです。フラグとプラットフォームを組み合わせる場合は、これらの組み合わせに対して明示的なサフィックスを作成する必要があります。
ゲームの作業中は、常にリソースの中で最も一般的なバージョンを参照してください。レベル内に big_white_rock.ps4 ユニットを明示的に配置した場合、このリソースはすべてのプラットフォームで使用されます。オーバーライドの解像度を取得するには、レベル内に big_white_rock ユニットを配置する必要があります。このユニットは、オーバーライドの設定に基づいて、big_white_rock.ps4、big_white_rock.xb1 などに自動的に再マップされます。