ワールド ロック ツールのコンテキストとマネージャーの設定
ワールド ロック ツールのコンテキストを使用すると、Unity インスペクターでのワールド ロック ツール マネージャーのパラメーターのカスタマイズが可能になります。
WorldLockingContext コンポーネントは WorldLockingManager の UI を表示しますが、それらが同じものではないことを理解しておくことが重要です。また、状況によっては、それらの関係を理解することが重要な場合があります。
マネージャーはシングルトン
WorldLockingManager は、オンデマンドで作成され、アプリケーションの有効期間にわたって持続するシングルトンです。 WorldLockingManager に対する呼び出しが行われない場合は、インスタンス化されません。 インスタンス化されると、アプリケーションがシャットダウンされるまでは有効なままになります。 破棄されて再インスタンス化されることはありません。
WorldLockingManager は Unity オブジェクトではなく、汎用の C# クラスです。 その更新は、プロキシ Unity コンポーネント (プライベート WorldLockingManager クラスのインスタンス) によって駆動されます。 これは、Unity の作成/更新/破棄サイクルからは独立しています。
コンテキストは Unity コンポーネントです。
WorldLockingContext は、Unity コンポーネントであり、通常の方法でシーン内のオブジェクトに追加されます。 そのフィールドは、Unity インスペクターで、他の通常の Unity コンポーネントのフィールドと同様に表示されます。
1 つのシーンで複数のアクティブな WorldLockingContexts を使用してもエラーにはなりませんが、オブジェクトの読み込みの順序が不明なときに動作が定義されないため、望ましくない可能性があります。
コンテキストの設定は、WorldLockingContext が読み込まれたときに適用されます。 具体的には、コンテキストは、OnEnable の呼び出しのとき、およびそのシーンがアクティブなシーンになるたびに、ワールド ロック ツール マネージャーにその設定をプッシュします。 後者は、新しいアクティブなシーンがコンテキストが属しているシーンである場合に限り、Unity.SceneManager.activeSceneChanged コールバックの一部として適用されます。
すべての設定はスクリプトから適用される可能性があります
ランタイムの任意の時点で、アプリケーションはスクリプトを使用してカスタム設定を WorldLockingManager に適用できます。 設定の変更に影響を与えるためにリソースの破棄と再構築が必要な場合は、設定の変更後直ちに再構築が行われます。
WorldLockingManager から個々のプロパティ値を取得するための便利なメンバーがいくつかあります。たとえば、AutoSave を使用すると、パラメーターの設定が常にまとめて行われます。 たとえば、AutoMerge 機能と AutoRefreeze 機能を切り替えるコードは次のようになります。
/// Get a copy of the current settings
var settings = WorldLockingManager.GetInstance().Settings;
/// Modify the copy
settings.AutoMerge = !settings.AutoMerge;
settings.AutoRefreeze = !settings.AutoRefreeze;
/// Update the current settings to the values in the copy.
WorldLockingManager.GetInstance().Settings = settings;
診断の設定の場合も同様です。
この方法で一度に複数の設定を変更すると、1 回の再構築のコストしか発生しません (必要な場合)。
設定の優先順位
WorldLockingManager に現在適用されている設定のルールは非常に単純です。
コンテキストを含むシーンが読み込まれておらず、スクリプトから明示的に設定された設定もない場合、WorldLockingManager の既定の設定が使用されます。
設定は、シーンを含む WorldLockingContext の読み込みによってオーバーライドされるか、アプリケーションのスクリプトから呼び出されて明示的に変更されるまで、その値を保持します。
ワールド ロック ツール マネージャーのコンテキストからの設定とスクリプトからの設定を混在させる場合は、注意が必要です。 コンテキストでは常にその設定が読み込み時に適用されるため、読み込み時に手動で設定を適用するスクリプト (特に OnEnable コールバックから) のために、競合状態と不確定な動作が発生する可能性があります。
使用可能な設定
ワールド ロック ツールの動作を制御するために使用できる設定は、次のようなグループに分類されます。
自動化の設定
自動化の設定は、ワールド ロック ツール マネージャーの実行時の動作を制御します。 変更可能なフィールドとその影響については、 Managersettings クラスで説明されています。 これらは、マネージャーによる定期的な自動アクションの有効化と無効化の切り替えに重点を置いています。 無効化された自動アクションは、代わりに手動で実行できます。
リンケージ設定
リンケージ設定を使用して、ワールド ロック ツールの修正を適用するために変換が使用されるシーンの GameObjects
を明示的に定義します。
[Use Existing] \(既存のものを使用\) フィールドを使用すると、カメラ リグを使用してリンクされたオブジェクトをシーンに 1 回設定し ([Use Existing] \(既存のものを使用\) を false に設定)、後続のコンテンツ シーンの読み込みでオーバーライドされないようにすることができます ([Use Existing] \(既存のものを使用\) を true に設定)。
反対に、[Use Existing] \(既存のものを使用\) を false に設定すると、異なるカメラ リグを使用する複数のシーンを、カメラの階層内の適切な場所にバインドすることができます。
スクリプトからカメラ階層を作成して管理する場合、すべてのコンテキストで [Use Existing] \(既存のものを使用\) フィールドを true に設定し、カメラ管理スクリプトから明示的にリンクを更新する必要があります。
必要な変換が指定されていない場合、null のままにするか、すべてのコンテキストで "既存のものを使用" すると、システムは警告を発行し、適切な選択を推測しようとします。 必須ではありませんが、システムの推測ではなく、適切な変換を明示的に設定することをお勧めします。
ここでは、カメラの変換の修正を適用する方法を制御するオプションが 2 つ追加されています。
最初の [Apply Adjustment] \(調整の適用\) チェックボックスは、既定でオンになります。 これにより、各フレームの計算されたカメラの修正を "調整フレーム" の GameObject
に適用するようにシステムに指示します。 この機能を無効にすることは非常に高度な操作なので、他のすべての問題を解決し、ワールド ロック ツールについて詳しく理解した後にのみこれを試してください。 簡単に言うと、これは、カメラの修正をカメラに適用せず、他の方法で適用することをシステムに伝えます。 通常、これは AlignSubtree
コンポーネントを介して行いますが、必須ではありません。
2 番目の [No Pitch And Roll] チェックボックスは、Playspace
からロックされた空間への変換で計算されたピッチとロールを 0 にすることをシステムに指示します (こちらの WLT 座標空間の説明を参照してください)。 これは、SpacePin
システムによって適用される回転には影響しませんが、Frozen World Engine によって計算されるカメラの修正変換にのみ影響します。
アンカー管理の設定
アンカー管理では、アンカー トラッキング システムのすべての明示的な選択を設定します。 この選択は現在、起動時にのみ実行し、選択した後は変更できません。
ここで他の設定を使用すると、基になる内部アンカー グラフの密度を制御できます。 これらは、いつでも変更できますが、内部グラフに反映されるまでに時間がかかる場合があります。
非常に大きな領域をカバーする場合は、精度性能を犠牲にすることで、内部アンカー グラフの密度を下げることができます。 これは、MinNewAnchorDistance を増やすだけで実行できます。 新しい内部アンカーを追加する前に必要な最小距離を増やすことにより、アンカーの間隔が広くなり、アンカーの密度が低下します。
エッジ作成テストを成功させるためには、MaxAnchorEdgeLength を MinNewAnchorDistance より大きくする必要があることに注意してください。 実際には、MaxAnchorEdgeLength を MinNewAnchorDistance より 10 ~20% 大きくすると適切に機能します。
MaxLocalAnchors パラメーターは、密度を変更するのではなく、内部アンカーの数を直接制限します。 現在、アンカー数が制限を超えている場合、数を減らすために、カメラから最も遠く離れているアンカーがリサイクルされます。 ただし、興味深い他のアルゴリズムが調査中であるため、アプリケーションはこの特定の実装に依存しないようにする必要があります。
詳細については、AnchorSettings 構造体内のドキュメントを参照してください。
診断設定
診断設定では、動作とデバッグの分析に関する診断の収集をコントロールします。 通常は、[Use Defaults] \(既定値を使用\) の設定のままにしておきます。これにより、診断の収集が無効になります。 診断の収集はパフォーマンスを大きく低下させるため、必要な場合を除いて回避する必要があります。
開発中に、予期しない望ましくない動作が見られた場合は、[Use Defaults] \(既定値を使用\) を無効にし、DiagnosticsSettings.Enabled を有効にすることで、その動作の理解と修正に役立つデータの収集を有効にします。
変更に使用できるフィールドについては、DiagnosticsSettings クラスで説明しています。
既定の設定
マネージャーと診断の両方の設定には、設定の [Use Defaults] \(既定値を使用\) チェックボックスが含まれています。 [Use Defaults] \(既定値を使用\) プロパティは、スクリプトからも使用できます。
[Use Defaults] \(既定値を使用\) プロパティが true の場合、現在の既定の設定が使用されます。 新しいリリースでプロパティの既定値が変更された場合は、[Use Defaults] \(既定値を使用\) プロパティによって、新しいプロパティ値を使用するようにシステムに指示します。
[Use Defaults] \(既定値を使用\) プロパティを true に設定すたびに、すべての値が現在の既定値にリセットされます。 特定の時点で既定値のスナップショットの値をロックするには、[Use Defaults] \(既定値を使用\) プロパティを有効にして、すべてのフィールドを現在の既定値にリセットしてから、チェックボックスをオフにして、更新によって変更されないようにします。
実験およびデバッグのための開発時を除いて、[Use Defaults] \(既定値を使用\) を true に設定したままにすることをお勧めします。