Unreal Engine 5 exportieren/migrieren Vermögenswerte über C ++C++

Programme in C++. Entwicklerforum
Anonymous
 Unreal Engine 5 exportieren/migrieren Vermögenswerte über C ++

Post by Anonymous »

Ich benutze Unreal Engine 5.5 und ich bin nicht sehr erfahren mit C ++. Ich versuche, eine Lösung mit Hilfe von ChatGPT zu implementieren, aber ich stoße immer wieder auf Fehler. Hier ist, was ich tun möchte:
Ich möchte ein Plugin für die Berechtigungsnutzung entwickeln, die über ein Kontextmenü mit der rechten Maustaste ein oder mehrere Assets kopiert-einschließlich aller ihrer Abhängigkeiten-in den Ordner c: // assets. Das Kopieren von Vermögenswerten ohne ihre Abhängigkeiten funktioniert einwandfrei. Wenn ich jedoch versuche, Abhängigkeiten einzubeziehen, erhalte ich Fehler, wie sie sich mit Redakteuren in Bezug auf Redakteure oder fassetExportils beziehen, die nicht gefunden werden. Vielen Dank im Voraus!

Code: Select all

#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"
}
]

}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post