複数の World 間で NavData を共有する

複数の独立したサーバやルームを使用する MMO などのゲームで、ゲームの地形をロードする必要がある World を複数同時に使用する場合、事前生成されたスタティックな同一の NavData を共有するようにすべての World を設定することで、メモリを節約できます。

ただし、作成した各 NavData オブジェクトは、単一の World 内の単一の Database にのみ追加できます。このため、複数の World 間で同じ NavData を共有するには、World ごとに NavData オブジェクトを作成し、同じ Raw データを使用するように、その NavData オブジェクトを個別に設定します。

Raw データにアクセスするには:

各 NavData インスタンスを設定するには、NavData::LoadFromMemory() への呼び出しで Raw データを渡します。

for(KyUInt32 worldIdx = 0; worldIdx < worldCount; worldIdx++) // for each World
{
    Kaim::Ptr<Kaim::NavData> navData = *KY_NEW Kaim::NavData;
    navData->LoadFromMemory(myDataBuffer);

    ... // Add your NavData in the World with index worldIdx
}
注:ゲーム実行中、単一の Database によって維持されている NavData にランタイムで加えた変更(TagVolume または NavGraph の追加など)は、その Database 内でローカルに実行されます。他の World と共有されている、事前生成されたスタティック データは、影響を受けません。
注:この方法を使用した場合、Raw データがいずれかの World で使用されている限り、そのデータをメモリ内で維持する必要があります。Raw データをすべての Database から削除するまで、メモリからそのデータを開放しないでください。