이 페이지는 게임에서 TagVolumes를 만들고 업데이트하고 삭제하는 방법을 설명합니다.
장애물 관리 시스템에서 TagVolume 클래스의 역할에 대한 소개는 동적 장애물 및 TagVolume 사용을(를) 참조하십시오.
NavTag 시스템에 대한 배경 정보는 사용자 정의 데이터로 태그 지정을(를) 참조하십시오.
TagVolume의 초기화 및 삭제를 관리하려면 게임에서 클래스를 만들어야 합니다. TagVolume이 Gameware Navigation World에서 나타내려는 장애물 또는 영역의 수명 기간을 관리하는 게임에는 이미 클래스가 있을 수 있습니다. 이 경우 해당 클래스를 사용할 수 있습니다.
예: [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을 초기화하려면 TagVolumeInitConfig 구성 클래스의 인스턴스를 제공해야 하며 TagVolume에서 필요한 데이터로 설정합니다. 적어도 다음을 설정해야 합니다.
예: [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;
}