リソース管理 (Resource management)¶
Kanzi では、リソースはアプリケーションの異なる部分で再利用できるアイテムです。例えば、Mesh Data リソースは Model ノードのジオメトリを定義し、異なるノードで同じ Color Brush を使用して Foreground Brush または Background Brush プロパティを設定できます。
Kanzi リソースマネージャーは、アプリケーション内でリソースを整理し再利用することを可能にします。
ノードのリソースの設定¶
Kanzi では、リソースをノードに直接リソースURLを使用して設定するか、間接的にリソースキーを使用して設定することができます。Kanzi Studio でリソースを設定すると、デフォルトでURLを使用してすべてのリソースが割り当てられます。Kanzi Studio で間接的な設定を使用したい場合は、リソース辞書にリソースのキーを作成し、プロパティでそのキーを選択する必要があります。キーの検索は階層的であるため、ツリー内にリソース辞書エントリを作成することで、キーが何に解決されるかを定義できます。
リソースキーを使ってリソースを設定することにより、以下が可能になります。
|
|
|
||
各種スキンやテーマを作成、適用して、アプリケーションの見た目を変更する。 |
各種言語やロケールに対応した、異なるバージョンのアプリケーションを作成する。 |
リソースをオーバーライドしてコンテンツをモジュール化する。 |
リソースを共有することで、アプリケーションのメモリとランタイムの要件を減らすことができます。これにより、同じリソースを再利用したり、リソースを変更してアプリケーション全体にその変更を反映させることができます。例えば、その方法でアニメーション化されたブラシを共有することができます。
Kanzi は、アプリケーションが実行中にリソースを管理するための多くのツールを提供します。Kanzi では、次のことができます。
複数のスレッドでリソースをロードし、デバイスで複数のコアを使用することで、アプリケーションの起動時間やロード時間を高速化する。リソースを並列でロードする を参照してください。
リソースを非同期的にロードすることで、アプリケーションの起動時間や応答性を改善する。ノードプレハブリソースを非同期でロードする を参照してください。
デバイスストレージから画像を選択します。ファイルシステムから画像を読み込む を参照してください。
アプリケーションをローカライズします。アプリケーションのローカライズ と チュートリアル: アプリケーションをローカライズする を参照してください。
テーマを作成、適用して、アプリケーションの見た目を変更する。アプリケーションのテーマ設定 を参照してください。
リソースが使用中かどうかを確認し、未使用のリソースをアンロードします。これにより、すべてのリソースが一度にメモリに収まらない複雑なアプリケーションを作成することができます。Kanzi Engine が未使用のリソースをどのように処理するかを設定する を参照してください。
Kanzi リソースタイプ¶
|
|||||||||
|
|||||||||
|
|||||||||
|
|||||||||
|
|||||||||
|
|||||||||
|
|||||||||
|
|||||||||
|
|||||||||
|
|||||||||
|
プロジェクトへのリソースアセットのインポート¶
Kanzi Studio で直接いくつかのリソースを作成できます(例えば、ブラシやアニメーション)。一部のリソースについては、サードパーティツールで作成されたアセットをインポートする必要があります(例えば、テクスチャやメッシュ)。インポートしています を参照してください。
リソース URL¶
リソースを参照する最も基本的な方法はURLです。URLはkzbファイル内のリソースやデバイスストレージ上のファイルを参照できます。プロパティにリソースを設定する際には、そのリソースのURLを指定する必要があります。Properties ウィンドウの Kanzi Studio でそれを行うと、選択したリソースに対して Kanzi が自動的に行います。APIを使用してリソースプロパティを設定する場合は、リソースのURLを手動で指定する必要があります。プロジェクト内のリソースのURLを見つけるには、Kanzi Studio でリソースを右クリックし、Copy .kzb URL を選択します。デバイスストレージ上のファイルを参照するには、file:/// URL形式を使用します。
APIを使用する際には、リソースオブジェクトを直接指定することができます。リソースオブジェクトを受け入れるノードは、通常そのようなオブジェクトを受け入れるメソッドのオーバーロードを提供します。例えば、Image ノードで画像を設定するには、Image2D::setImage を使用します。
リソースディクショナリ (Resource Dictionary)¶
リソースディクショナリは、各リソースのキーと値のペアエントリのコレクションです。リソースディクショナリは任意のノードで定義できます。キーはリソースを間接的に指定する手段を提供します。リソースやノードへのURLを指定する代わりに、キーを指定できます。Kanzi は、キーがどのリソースに解決されるかを定義する最も近いリソースディクショナリを検索することで、リソースを動的に解決します。キーをアイテムに解決する必要がある場合、解決プロセスはキーを使用するノードからリソースディクショナリをチェックし始めます。そのノードのディクショナリにキーが含まれている場合、そのノードはそのキーを使用し、含まれていない場合は親のディクショナリをキーが見つかるまでチェックします。このプロセスはノードツリーのルートまで再帰的に続きます。ノードがキーを見つけられない場合、その後どうするかはノード次第です。例えば、Image ノードが画像を表示しないのは有効なケースです。Kanzi はリソースが見つからない場合にソフトに失敗を制御しますが、プラグインではプラグインの作者が何が起こるかを定義することになります。
デフォルトのリソース¶
Kanzi には、アプリケーションをより迅速に作成できるデフォルトリソースが付属しています。たとえば、Scene を作成すると、Kanzi がデフォルトのレンダーパスを提供し、Text Block または Text Box ノードを作成すると、Kanzi がデフォルトのフォントを提供します。デフォルトの Kanzi リソースをカスタマイズする必要がある場合は、ニーズに合ったリソースを作成またはインポートし、Kanzi のデフォルトリソースの代わりにそれらを使用してください。
Kanzi Studio プロジェクトから kzb ファイルを作成すると、デフォルトで Kanzi リソースが kzb ファイルに含まれます。
リソースマネージャー¶
リソースマネージャーは、リソースのライフタイム、ロード、およびアンロードを管理します。Kanzi APIを使用してリソースマネージャーにアクセスでき、リソースのライフタイムポリシーを指定したり、未使用のリソースを削除したりすることができます。リソースが常にメモリに保持されるか、必要ないときにアンロードされるかを指定するには、ポリシーを指定します。リソースマネージャー全体に対して、または各リソースに対してポリシーを指定することができます。リソースをメモリに保持するポリシーの場合、アプリケーションのロジックに基づいて手動で削除をリクエストすることができます。たとえば、新しい Page ノードのために大量のリソースをロードするためにアプリケーション内で Page ノードを変更する際に、手動でリソースを削除することができます。
リソースマネージャーを使用すると、Kanzi アプリケーション内のGPUリソースがどのメモリに格納されるかを定義できます。例えば、Library > Materials and Textures > Textures 内の Kanzi Studio のテクスチャに対してこれを設定するには、テクスチャを選択し、Properties で GPU Memory Type プロパティを設定します。
GPU Only。リソースはGPUメモリにデプロイされ、デプロイ後すぐにRAMから解放されます。Kanzi は、アプリケーションコードでリリースしない限り、リソースをGPUメモリに保持します。
GPU and RAM。リソースはGPUメモリにデプロイされます。Kanzi は、リソースをGPUとRAMの両方に保持し、プラットフォームとアプリケーションに基づいてリソースを管理します。Kanzi はリソースのアンロードを自動的に管理します。GPU Onlyと比較して、これによりより多くのRAMを消費しますが、例えばAndroidでは、より速い再開時間を提供します。
RAM Only。リソースは、アプリケーションコードで指示されたときにのみGPUにデプロイされます。Kanzi は、リソースをGPUメモリに保持し、アプリケーションコードでリリースしたときにアンロードします。
一時停止と再開¶
Kanzi アプリケーションが一時停止状態 (MainLoopState::Paused) のとき:
Androidでは、デフォルトで、kzbファイルに保存されていないGPUリソースは無効になります。アプリケーションがkzbファイルからロードしないカスタムリソースを使用する場合、必要に応じてそれらのリソースを手動でリロードおよび再配置することを確認してください。Kanzi は他のすべてのリソースを自動的に復元します。
他のプラットフォームでは、Kanzi はデフォルトでGPUリソースを無効にしません。
アプリケーションが一時停止状態のときに、GPUリソースをどのように処理するかをアプリケーション設定で設定できます。アプリケーション構成リファレンス で、HandleGPUResources を参照してください。