diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish.dll b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish.dll index ff06f8e..85788da 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish.dll and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFish.dll differ diff --git a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor.dll b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor.dll index 84962bd..b09fc03 100644 Binary files a/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor.dll and b/ProjectFish/Binaries/Win64/UnrealEditor-ProjectFishEditor.dll differ diff --git a/ProjectFish/Content/DataAssets/Fish/Fish_Boss.uasset b/ProjectFish/Content/DataAssets/Fish/Fish_Boss.uasset index cea2f1f..7356f20 100644 Binary files a/ProjectFish/Content/DataAssets/Fish/Fish_Boss.uasset and b/ProjectFish/Content/DataAssets/Fish/Fish_Boss.uasset differ diff --git a/ProjectFish/Content/DataAssets/Fish/Fish_DeepInfo.uasset b/ProjectFish/Content/DataAssets/Fish/Fish_DeepInfo.uasset index cf2afba..c2d2043 100644 Binary files a/ProjectFish/Content/DataAssets/Fish/Fish_DeepInfo.uasset and b/ProjectFish/Content/DataAssets/Fish/Fish_DeepInfo.uasset differ diff --git a/ProjectFish/Source/ProjectFish/DataAsset/FishInfoConfigAsset.cpp b/ProjectFish/Source/ProjectFish/DataAsset/FishInfoConfigAsset.cpp index 6abe5de..c4e0535 100644 --- a/ProjectFish/Source/ProjectFish/DataAsset/FishInfoConfigAsset.cpp +++ b/ProjectFish/Source/ProjectFish/DataAsset/FishInfoConfigAsset.cpp @@ -2,3 +2,35 @@ #include "FishInfoConfigAsset.h" + +#include "AssetRegistry/AssetRegistryModule.h" + +void UFishInfoConfigAsset::PostDuplicate(bool bDuplicateForPIE) +{ + Super::PostDuplicate(bDuplicateForPIE); + if (!bDuplicateForPIE) + { + int32 MaxFishID = 0; + + // 获取资产注册表模块 + FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); + IAssetRegistry& AssetRegistry = AssetRegistryModule.Get(); + + // 查找所有 QuestAsset 资产 + TArray AssetDataList; + AssetRegistry.GetAssetsByClass(UFishInfoConfigAsset::StaticClass()->GetClassPathName(), AssetDataList, true); + + // 遍历所有已存在的任务资产,找到最大的 QuestID + for (const FAssetData& AssetData : AssetDataList) + { + if (UFishInfoConfigAsset* FishAsset = Cast(AssetData.GetAsset())) + { + if (FishAsset->FishID > MaxFishID) + { + MaxFishID = FishAsset->FishID; + } + } + } + FishID = MaxFishID + 1; + } +} diff --git a/ProjectFish/Source/ProjectFish/DataAsset/FishInfoConfigAsset.h b/ProjectFish/Source/ProjectFish/DataAsset/FishInfoConfigAsset.h index 0116c4d..711a874 100644 --- a/ProjectFish/Source/ProjectFish/DataAsset/FishInfoConfigAsset.h +++ b/ProjectFish/Source/ProjectFish/DataAsset/FishInfoConfigAsset.h @@ -15,9 +15,9 @@ class PROJECTFISH_API UFishInfoConfigAsset : public UDataAsset { GENERATED_BODY() - //virtual void PostDuplicate(bool bDuplicateForPIE) override; + virtual void PostDuplicate(bool bDuplicateForPIE) override; public: - UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = fish, meta = (ToolTip = "鱼的ID")) + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = fish, meta = (ToolTip = "鱼的ID")) int32 FishID; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = fish, meta = (ToolTip = "鱼的名称")) diff --git a/ProjectFish/Source/ProjectFish/DataAsset/QuestAsset.cpp b/ProjectFish/Source/ProjectFish/DataAsset/QuestAsset.cpp index d27f6d8..d9e124f 100644 --- a/ProjectFish/Source/ProjectFish/DataAsset/QuestAsset.cpp +++ b/ProjectFish/Source/ProjectFish/DataAsset/QuestAsset.cpp @@ -81,7 +81,7 @@ void UQuestAsset::PostDuplicate(bool bDuplicateForPIE) } } } - QuestID += 1; + QuestID = MaxQuestID + 1; } } #endif diff --git a/ProjectFish/Source/ProjectFishEditor/Private/Factory/FishInfoConfigAssetFactory.cpp b/ProjectFish/Source/ProjectFishEditor/Private/Factory/FishInfoConfigAssetFactory.cpp new file mode 100644 index 0000000..a35383d --- /dev/null +++ b/ProjectFish/Source/ProjectFishEditor/Private/Factory/FishInfoConfigAssetFactory.cpp @@ -0,0 +1,56 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "Factory/FishInfoConfigAssetFactory.h" +#include "ProjectFish/DataAsset/QuestAsset.h" +#include "AssetRegistry/AssetRegistryModule.h" +#include "AssetRegistry/AssetData.h" +#include "ProjectFish/DataAsset/FishInfoConfigAsset.h" + +UFishInfoConfigAssetFactory::UFishInfoConfigAssetFactory() +{ + SupportedClass = UFishInfoConfigAsset::StaticClass(); + bCreateNew = true; + bEditAfterNew = true; +} + +UObject* UFishInfoConfigAssetFactory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, + UObject* Context, FFeedbackContext* Warn) +{ + UFishInfoConfigAsset* NewFishAsset = NewObject(InParent, Class, Name, Flags | RF_Transactional); + + // 自动生成唯一的 QuestID + if (NewFishAsset) + { + int32 MaxFishID = 0; + + // 获取资产注册表模块 + FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); + IAssetRegistry& AssetRegistry = AssetRegistryModule.Get(); + + // 查找所有 QuestAsset 资产 + TArray AssetDataList; + AssetRegistry.GetAssetsByClass(UFishInfoConfigAsset::StaticClass()->GetClassPathName(), AssetDataList, true); + + // 遍历所有已存在的任务资产,找到最大的 QuestID + for (const FAssetData& AssetData : AssetDataList) + { + if (UFishInfoConfigAsset* FishAsset = Cast(AssetData.GetAsset())) + { + if (FishAsset->FishID > MaxFishID) + { + MaxFishID = FishAsset->FishID; + } + } + } + NewFishAsset->FishID = MaxFishID + 1; + } + + return NewFishAsset; +} + + +bool UFishInfoConfigAssetFactory::ShouldShowInNewMenu() const +{ + return true; +} diff --git a/ProjectFish/Source/ProjectFishEditor/Public/Factory/FishInfoConfigAssetFactory.h b/ProjectFish/Source/ProjectFishEditor/Public/Factory/FishInfoConfigAssetFactory.h new file mode 100644 index 0000000..cdebda6 --- /dev/null +++ b/ProjectFish/Source/ProjectFishEditor/Public/Factory/FishInfoConfigAssetFactory.h @@ -0,0 +1,22 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Factories/Factory.h" +#include "FishInfoConfigAssetFactory.generated.h" + +/** + * + */ +UCLASS() +class PROJECTFISHEDITOR_API UFishInfoConfigAssetFactory : public UFactory +{ + GENERATED_BODY() +public: + UFishInfoConfigAssetFactory(); + + // UFactory interface + virtual UObject* FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override; + virtual bool ShouldShowInNewMenu() const override; +};