Unreal Engine 5 Export/Migrate Assets по C ++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Unreal Engine 5 Export/Migrate Assets по C ++

Сообщение Anonymous »

Я использую Unreal Engine 5.5, и я не очень опытен с C ++. Я пытаюсь реализовать решение с помощью CHATGPT, но я продолжаю сталкиваться с ошибками. Вот что я стремлюсь сделать: < /p>
Я хочу разработать плагин для использования привати. в папку c: // активы. Копирование активов без их зависимостей работает нормально, но когда я пытаюсь включить зависимости, я получаю ошибки, такие как те, которые связаны с редакторами, не найденными. Эти ошибки или правильно включают зависимости, будут очень оценены. Заранее спасибо!#include "TestPlugin.h"
#include "Modules/ModuleManager.h"
#include "ContentBrowserModule.h"
#include "IContentBrowserSingleton.h"
#include "Framework/MultiBox/MultiBoxBuilder.h"
#include "AssetRegistry/AssetData.h"
#include "Runtime/AssetRegistry//Public/AssetRegistry/AssetRegistryModule.h"
#include "Misc/PackageName.h"
#include "Misc/Paths.h"
#include "HAL/FileManager.h"
#include "FileHelpers.h"
#include "EditorScriptingTools.h"

#define LOCTEXT_NAMESPACE "FTestPluginModule"

void FTestPluginModule::StartupModule()
{
FContentBrowserModule& ContentBrowserModule = FModuleManager::LoadModuleChecked("ContentBrowser");
TArray& ExtenderDelegates = ContentBrowserModule.GetAllAssetViewContextMenuExtenders();
ExtenderDelegates.Add(FContentBrowserMenuExtender_SelectedAssets::CreateRaw(this, &FTestPluginModule::OnExtendContentBrowserAssetSelectionMenu));
}

void FTestPluginModule::ShutdownModule()
{
if (FModuleManager::Get().IsModuleLoaded("ContentBrowser"))
{
FContentBrowserModule& ContentBrowserModule = FModuleManager::LoadModuleChecked("ContentBrowser");
TArray& ExtenderDelegates = ContentBrowserModule.GetAllAssetViewContextMenuExtenders();
ExtenderDelegates.RemoveAll([this](const FContentBrowserMenuExtender_SelectedAssets& Delegate)
{
return Delegate.IsBound() && Delegate.GetHandle().IsValid();
});
}
}

TSharedRef FTestPluginModule::OnExtendContentBrowserAssetSelectionMenu(const TArray& SelectedAssets)
{
CurrentSelectedAssetPaths.Empty();
for (const FAssetData& Asset : SelectedAssets)
{
CurrentSelectedAssetPaths.Add(Asset.GetObjectPathString());
}

TSharedRef Extender(new FExtender());
Extender->AddMenuExtension("GetAssetActions", EExtensionHook::After, nullptr,
FMenuExtensionDelegate::CreateRaw(this, &FTestPluginModule::AddMenuExtension));
return Extender;
}

void FTestPluginModule::AddMenuExtension(FMenuBuilder& MenuBuilder)
{
MenuBuilder.AddMenuEntry(
FText::FromString("SR_TEST"),
FText::FromString("Loggt eine Nachricht"),
FSlateIcon(),
FUIAction(FExecuteAction::CreateRaw(this, &FTestPluginModule::OnSRTestClicked))
);

MenuBuilder.AddMenuEntry(
FText::FromString("Migrate to C:/assets"),
FText::FromString("Migriert die selektierten Assets samt Abhängigkeiten nach C:/assets"),
FSlateIcon(),
FUIAction(FExecuteAction::CreateRaw(this, &FTestPluginModule::OnMigrateClicked))
);
}

void FTestPluginModule::OnSRTestClicked()
{
UE_LOG(LogTemp, Log, TEXT("SR_TEST menu entry clicked!"));
}

void FTestPluginModule::OnMigrateClicked()
{
if (CurrentSelectedAssetPaths.Num() == 0)
{
UE_LOG(LogTemp, Warning, TEXT("No assets selected for migration."));
return;
}

FString SaveDirectory = TEXT("C:/assets");

for (const FString& ObjectPath : CurrentSelectedAssetPaths)
{
UObject* ObjectToExport = LoadObject(nullptr, *ObjectPath);
if (!ObjectToExport)
{
UE_LOG(LogTemp, Error, TEXT("Failed to load asset: %s"), *ObjectPath);
continue;
}

FString AssetName = ObjectToExport->GetName();
bool bSuccess = FAssetExportUtils::ExportObject(ObjectToExport, SaveDirectory, AssetName, TEXT(".uasset"), true);
if (bSuccess)
{
UE_LOG(LogTemp, Log, TEXT("Successfully exported asset: %s"), *AssetName);
}
else
{
UE_LOG(LogTemp, Error, TEXT("Export failed for asset: %s"), *AssetName);
}
}
}

#undef LOCTEXT_NAMESPACE

IMPLEMENT_MODULE(FTestPluginModule, TestPlugin)
< /code>
testplugin.h
#pragma once

#include "Modules/ModuleManager.h"

// Vorwärtsdeklaration
struct FAssetData;

class FTestPluginModule : public IModuleInterface
{
public:
virtual void StartupModule() override;
virtual void ShutdownModule() override;

private:
// Speichert die ObjectPath-Strings der selektierten Assets
TArray CurrentSelectedAssetPaths;

// Erzeugt den Menü-Extender im Content Browser
TSharedRef OnExtendContentBrowserAssetSelectionMenu(const TArray& SelectedAssets);

// Fügt die Menüeinträge hinzu
void AddMenuExtension(class FMenuBuilder& MenuBuilder);

// Callback für den SR_TEST Menüeintrag
void OnSRTestClicked();

// Callback für den Migrate-Menüeintrag
void OnMigrateClicked();
};
< /code>
testplugin.build.cs
// Copyright Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;

public class TestPlugin : ModuleRules
{
public TestPlugin(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;

PublicIncludePaths.AddRange(
new string[] {
// ... add public include paths required here ...
}
);

PrivateIncludePaths.AddRange(
new string[] {
// ... add other private include paths required here ...
}
);

PublicDependencyModuleNames.AddRange(
new string[]
{
"Core",
"AssetRegistry",
"UnrealEd",
"EditorScripting"

}
);

PrivateDependencyModuleNames.AddRange(
new string[]
{
"CoreUObject",
"Engine",
"Slate",
"SlateCore",
"ContentBrowser",
"UnrealEd"

}
);

DynamicallyLoadedModuleNames.AddRange(
new string[]
{
// ... add any modules that your module loads dynamically here ...
}
);
}
}
< /code>
testplugin.h
#pragma once

#include "Modules/ModuleManager.h"

// Vorwärtsdeklaration
struct FAssetData;

class FTestPluginModule : public IModuleInterface
{
public:
virtual void StartupModule() override;
virtual void ShutdownModule() override;

private:
// Speichert die ObjectPath-Strings der selektierten Assets
TArray CurrentSelectedAssetPaths;

// Erzeugt den Menü-Extender im Content Browser
TSharedRef OnExtendContentBrowserAssetSelectionMenu(const TArray& SelectedAssets);

// Fügt die Menüeinträge hinzu
void AddMenuExtension(class FMenuBuilder& MenuBuilder);

// Callback für den SR_TEST Menüeintrag
void OnSRTestClicked();

// Callback für den Migrate-Menüeintrag
void OnMigrateClicked();
};
< /code>
testplugin.uplugin
{
"FileVersion": 3,
"Version": 1,
"VersionName": "1.0",
"FriendlyName": "TestPlugin",
"Description": "",
"Category": "Other",
"CreatedBy": "",
"CreatedByURL": "",
"DocsURL": "",
"MarketplaceURL": "",
"SupportURL": "",
"CanContainContent": true,
"IsBetaVersion": false,
"IsExperimentalVersion": false,
"Installed": false,
"Modules": [
{
"Name": "TestPlugin",
"Type": "Editor",
"LoadingPhase": "PostEngineInit"
}
]

}


Подробнее здесь: https://stackoverflow.com/questions/794 ... ets-over-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»