このページでは、ゲームの TagVolume を作成、更新、および破棄する方法について説明します。
障害物の管理システムにおける TagVolume クラスの役割については、「動的な障害物や TagVolume を使用する」を参照してください。
NavTag システムのバックグラウンド情報については、「カスタム データでタグ付けする」を参照してください。
ゲーム内に TagVolume の初期化と破棄を管理するクラスを作成する必要があります。ゲーム内に既に Gameware Navigation World 内で TagVolume が表しているゾーンまたは障害物のライフスパンを管理するクラスがある場合があります。その場合は、そのクラスを使用できます。
例: [Tutorial_ObstacleIntegration.cpp からのコード]
class MyGameTagVolume { public: MyGameTagVolume(): m_navTagVolume(KY_NULL) {} void Initialize(Kaim::World* world); void Destroy(); Kaim::Ptr<Kaim::TagVolume> m_navTagVolume; // We will keep the InitConfig too. This is not necessary, but it is convenient in case // we want to re-create the TagVolume with slightly different settings. Kaim::TagVolumeInitConfig m_navTagVolumeInitConfig; };
TagVolume を初期化するには、TagVolume が必要とするデータを設定した TagVolumeInitConfig 設定クラスのインスタンスを提供する必要があります。少なくとも以下を設定する必要があります。
例: [Tutorial_ObstacleIntegration.cpp からのコード]
void MyGameTagVolume::Initialize(Kaim::World* world) { // Set up the TagVolumeInitConfig m_navTagVolumeInitConfig.m_world = world; m_navTagVolumeInitConfig.m_altitudeMin = 10.0f; m_navTagVolumeInitConfig.m_altitudeMax = 11.0f; m_navTagVolumeInitConfig.m_points.PushBack(Kaim::Vec2f(-19.0967f, 7.93156f)); m_navTagVolumeInitConfig.m_points.PushBack(Kaim::Vec2f(-15.3928f, 4.77404f)); m_navTagVolumeInitConfig.m_points.PushBack(Kaim::Vec2f(-11.9082f, 9.46633f)); m_navTagVolumeInitConfig.m_points.PushBack(Kaim::Vec2f(-14.6730f, 16.2140f)); m_navTagVolumeInitConfig.m_points.PushBack(Kaim::Vec2f(-14.5526f, 10.8631f)); m_navTagVolumeInitConfig.m_points.PushBack(Kaim::Vec2f(-18.5613f, 10.9361f)); // This sets the NavTag as non-walkable: it will "cut a hole" in the NavMesh m_navTagVolumeInitConfig.m_navTag.SetAsExclusive(); m_navTagVolumeInitConfig.m_navTag.m_blindDataArray.PushBack(0); // Create and initialize the TagVolume, and add it to the World m_navTagVolume = *KY_NEW Kaim::TagVolume; m_navTagVolume->Init(m_navTagVolumeInitConfig); m_navTagVolume->AddToWorld(); }
TagVolume クラスは更新されることを想定していません。指定したコンタと NavTag 値で作成された後は、破棄されるまで同じである必要があります。
TagVolume で陸地をゆっくりと侵食していく洪水のような、動いたり変化するゾーンを示す必要がある場合は、TagVolume を破棄し、新しい寸法で再作成する必要があります。ただし、NavMesh にボリュームを合成する際に必要な計算は簡単ではないため、フレームごとに、または数フレームごとにも実行しないことが望ましいです。代わりに、コードに距離のしきい値を設定して、しきい値に達するまで障害物が表すもに多少の不正確さがあっても許容することを検討してください。
TagVolume を破棄するには:
例: [Tutorial_ObstacleIntegration.cpp からのコード]
void MyGameTagVolume::Destroy() { m_navTagVolume->RemoveFromWorld(); m_navTagVolume = KY_NULL; }