23#if WITH_EDITORONLY_DATA
28 TArray<FString> Tokens;
30 TArray<FString> Params;
34 ParseCommandLine(*InParams, Tokens, Params);
40 FParse::Value(*InParams, TEXT(
"PackageName="), PackageParams.
Name);
45 FParse::Value(*InParams, TEXT(
"Maps="), Maps);
48 TArray<FString> MapNames;
51 Maps.ParseIntoArray(MapNames, TEXT(
" "),
true);
66 AssetsObjectLibrary = UObjectLibrary::CreateLibrary(UStaticMesh::StaticClass(),
false, GIsEditor);
71 for (
const auto &
Map : PackageParams.MapNames)
73 MoveAssetsFromMapForSemanticSegmentation(PackageParams.
Name,
Map);
78void MoveFiles(
const TArray<UObject *> &Assets,
const FString &DestPath)
81 check(DestPath.Len() > 0);
84 FAssetToolsModule &AssetToolsModule = FModuleManager::LoadModuleChecked<FAssetToolsModule>(
"AssetTools");
86 TArray<FAssetRenameData> AssetsAndNames;
88 for (
auto AssetIt = Assets.CreateConstIterator(); AssetIt; ++AssetIt)
101 AssetsAndNames.Emplace(Asset, DestPath, Asset->GetName());
105 if (AssetsAndNames.Num() > 0)
109 AssetToolsModule.Get().RenameAssets(AssetsAndNames);
114void UMoveAssetsCommandlet::MoveAssetsFromMapForSemanticSegmentation(
115 const FString &PackageName,
116 const FString &MapName)
120 const FString SrcPath = TEXT(
"/Game/") + PackageName + TEXT(
"/Maps/") + MapName;
137 TArray<FString> DestinationPaths = {SSTags::ROAD, SSTags::ROADLINE, SSTags::TERRAIN, SSTags::GRASS, SSTags::SIDEWALK, SSTags::CURB, SSTags::GUTTER};
141 TMap<FString, TArray<UObject *>> AssetDataMap;
144 for (
const auto &Paths : DestinationPaths)
146 AssetDataMap.Add(Paths, {});
156 UStaticMesh *MeshAsset = CastChecked<UStaticMesh>(MapAsset.GetAsset());
158 MapAsset.AssetName.ToString(AssetName);
164 const FString CurrentPackageName = MeshAsset->GetOutermost()->GetName();
168 if (!ensure(CurrentPackageName.StartsWith(SrcPath)))
175 if (AssetName.Contains(SSTags::R_ROAD1) || AssetName.Contains(SSTags::R_ROAD2))
177 AssetDataMap[SSTags::ROAD].Add(MeshAsset);
180 else if (AssetName.Contains(SSTags::R_MARKING1) || AssetName.Contains(SSTags::R_MARKING2))
182 AssetDataMap[SSTags::ROADLINE].Add(MeshAsset);
185 else if (AssetName.Contains(SSTags::R_TERRAIN))
187 AssetDataMap[SSTags::TERRAIN].Add(MeshAsset);
190 else if (AssetName.Contains(SSTags::R_SIDEWALK1) || AssetName.Contains(SSTags::R_SIDEWALK2))
192 AssetDataMap[SSTags::SIDEWALK].Add(MeshAsset);
195 else if (AssetName.Contains(SSTags::R_CURB1) || AssetName.Contains(SSTags::R_CURB2))
197 AssetDataMap[SSTags::CURB].Add(MeshAsset);
200 else if (AssetName.Contains(SSTags::R_GUTTER1) || AssetName.Contains(SSTags::R_GUTTER2))
202 AssetDataMap[SSTags::GUTTER].Add(MeshAsset);
207 AssetDataMap[SSTags::TERRAIN].Add(MeshAsset);
214 for (
const auto &Elem : AssetDataMap)
216 FString DestPath = TEXT(
"/Game/") + PackageName + TEXT(
"/Static/") + Elem.Key +
"/" + MapName;
217 MoveFiles(Elem.Value, DestPath);
222int32 UMoveAssetsCommandlet::Main(
const FString &Params)
230MoveAssets(PackageParams);
地图类的前向声明,用于在LaneInvasionSensor类中可能的引用。
TArray< FAssetData > MapContents
从任何对象库中加载地图
UObjectLibrary * AssetsObjectLibrary
用于在对象库中加载资产。 已加载的数据存储在 “资产数据” 中。
UMoveAssetsCommandlet()
默认构造函数.
包含 “包参数” 的结构体, 用于在调用此命令行工具时存储已解析的参数。
TArray< FString > MapNames