我一直在开发一个自动化系统,需要我生成给定Landscape的LayerInfo对象。到目前为止,我已经能够生成所需的 LayerInfo 对象,但我无法分配它们,或者更准确地说,当我尝试在 ULandscapeInfo 属性中分配必要的图层时,它们出现在编辑器中,但是没有分配,除非我保存它们并重新启动引擎,它们在编辑器中也显得很奇怪,如图所示。我认为这与此线程中的问题类似。下面的代码负责分配 LayerInfo:
// This method creates a
// new layer info object
UWorld * currentWorld = GetWorld();
ULevel * level = currentWorld->GetLevel(0); // TODO : just for debuging
ULandscapeLayerInfoObject* layerInfo = Landscape->CreateLayerInfo(*(layerName), level);
bool isDirty = layerInfo->MarkPackageDirty();
// Get a reference for the landscape Info
ULandscapeInfo* landscapeInfo = Landscape->GetLandscapeInfo();
landscapeInfo->CreateLayerEditorSettingsFor(layerInfo);
FLandscapeInfoLayerSettings* layerSettings = &landscapeInfo->Layers[1];
landscapeInfo->Layers[0] = FLandscapeInfoLayerSettings(layerInfo, Landscape);
UEditorAssetLibrary::SaveAsset(assetName, false);
// Assign the respective values
if (!layerSettings->LayerInfoObj)
{
layerSettings->Owner = Landscape;
layerSettings->LayerInfoObj = layerInfo;
layerSettings->bValid = true;
}
我知道这有点晚了,但我用一个我发现对我有用的解决方案回复了虚幻线程:
InfoObject->LayerName = LandscapeLayerSettings.LayerName;
InfoObject->bNoWeightBlend = false;
if (!LandscapeLayerSettings.LayerInfoObj)
{
LandscapeLayerSettings.Owner = Landscape;
LandscapeLayerSettings.bValid = true;
LandscapeLayerSettings.LayerInfoObj = InfoObject;
LandscapeLayerSettings.GetEditorSettings().LayerInfoObj = InfoObject;
}