Я использую 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
Unreal Engine 5 Export/Migrate Assets по C ++ ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1740420867
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"
}
]
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79464478/unreal-engine-5-export-migrate-assets-over-c[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия