在多个世界之间共享 NavData

如果您的游戏同时使用需要加载同一地形的多个世界,例如具有多个独立服务器或房间的 MMO 游戏,您可以通过将所有世界设置为共享同一静态预生成 NavData 来节省内存。

但是,您创建的每个 NavData 只能添加到单个世界的单个数据库中。要在多个世界之间共享同一 NavData,您必须为每个世界创建一个 NavData 对象,然后将每个 NavData 对象设置为使用相同的原始数据。

访问原始数据:

要设置每个 NavData 实例,请在对 NavData::LoadFromMemory() 的调用中传递原始数据缓冲区:

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
}
注意:在游戏期间,在运行时对由单个数据库维护的 NavData 进行的任何更改(如添加 TagVolume 或 NavGraph)将在该数据库内本地进行。与其他世界共享的静态预生成数据不受影响。
注意:如果选择使用此方法,必须确保只要有任何世界在使用原始数据,原始数据就一直保留在内存中。请勿从内存中释放原始数据,直到您将其从所有数据库中移除。