μΈλ¦¬μΌμμ μμ
λ©λμ μ νΉμ νμν΄λλ₯Ό κΈ°μ€μΌλ‘ PrimaryAsset 리μ€νΈλ₯Ό λΆλ¬μ€λ? κ·Έλ° μμ
μ νκ³ μλλ° μλν° & StandAlone μ€νμμλ μ μλνλλ°
ν¨ν€μ§ μμ, ν΄λΉ μμ
λ€μ λΆλ¬μ¬ μ μμ΄ μλ¬κ° λ°μνκ³ μμ΅λλ€
νμ¬ μ§νμν©μ΄Β
1. Primary Asset (AccessoryItem) μ μ
UCLASS()
class PHYSICSUK_API UAccessoryItem :
public UGameItem,
public IUseableItem
{
GENERATED_BODY()
public:
UAccessoryItem();
virtual void InitializeItem(FItemInformation ItemInformation) override;
virtual void BeginDestroy() override;
virtual FPrimaryAssetId GetPrimaryAssetId()
const override;
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps)
const override;
virtual void UseItem_Implementation() override;
UFUNCTION(BlueprintCallable)
void MakeRandomAccessoryAttribute();
virtual void SetItemAttributeToSpecHandle(FGameplayEffectSpecHandle SpecHandle)
const override;
UPROPERTY(Replicated, BlueprintReadOnly, EditAnywhere, Category =
"AccessoryItem")
FAccessoryItemInformation AccessoryItemInformation;
virtual bool operator==(
const FItemInformation& Rhs)
const override;
};
λμΆ© ꡬνμ μ΄λ κ²μκΉ (AccessoryItem)
GameItem = UPrimaryDataAssetμ κ³μΉν μμ΄ν
2. νλ‘μ νΈ μ€μ μ μμ
λ§€λμ μ ν΄λ μ§μ

ν΄λΉ μμ΄ν
μ Directoriesμ 보면 νμ ν΄λλ₯Ό μ§μ ν΄μ ν΄λΉ ν΄λ λ΄μ DataAssetμ μμ±ν΄λκ³ C++μμ ν΄λΉ 리μ€νΈλ₯Ό λΆλ¬μ¬ μ μλλ‘ μ μν¨.
μ΄λ κ² νλκΉ μλν° & StandAlone μ€νμμ ν΄λΉ μμ
λ€μ μ λλ‘ μ°Έμ‘°νκ³ μλλ°
λ¬Έμ λ ν¨ν€μ§μμ ν΄λΉ μμ
λ€μ΄ μ λλ‘ λΆλ¬μμ§μ§ μκ³ μμ΅λλ€.
//μμ
λ‘λ μ½λ c++
UGameItem* UPS_AssetManager::LoadRandomGameItem()
{
FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(
"AssetRegistry");
TArray<FAssetData> AssetData;
const UClass* GameItemClass = UGameItem::StaticClass();
const UClass* AccessoryItemClass = UAccessoryItem::StaticClass();
const UClass* ConsumableItemClass = UConsumableItem::StaticClass();
AssetRegistryModule.Get().GetAssetsByClass(FTopLevelAssetPath(GameItemClass->GetPathName()), AssetData);
AssetRegistryModule.Get().GetAssetsByClass(FTopLevelAssetPath(AccessoryItemClass->GetPathName()), AssetData);
AssetRegistryModule.Get().GetAssetsByClass(FTopLevelAssetPath(ConsumableItemClass->GetPathName()), AssetData);
int32 RandomIndex = FMath::RandRange(
0, AssetData.Num() -
1);
if(RandomIndex <
0 || AssetData.Num() ==
0)
{
return nullptr;
}
// μ νλ μμ
λ‘λ
UObject* SelectedAsset = AssetData[RandomIndex].GetAsset();
// μλ³Έ μμ
μ 볡μ¬λ³Έ μμ±
UGameItem* LoadedItem = Cast<UGameItem>(SelectedAsset);
if (LoadedItem != nullptr)
{
UGameItem* ItemInstance = DuplicateObject<UGameItem>(LoadedItem, nullptr);
if(UAccessoryItem* AccessoryItem = Cast<UAccessoryItem>(ItemInstance))
{
AccessoryItem->MakeRandomAccessoryAttribute();
}
//else if(UConsumableItem* ConsumableItem = Cast<UConsumableItem>(ItemInstance))
//{
// ConsumableItem->MakeRandomConsumableAttribute();
//}
return ItemInstance;
// μμ μ μν μΈμ€ν΄μ€ λ°ν
}
return nullptr;
}
AssetRegistryModule.Get().GetAssetsByClass(FTopLevelAssetPath(GameItemClass->GetPathName()), AssetData);
μ΄ λΌμΈμμ μλν° & StandAlone Launchμμλ μ λλ‘ λ AssetDataκ° μΆκ°κ°λλλ°
ν¨ν€μ§μμ ν΄λΉ λΌμΈμμ μμ
μ μ λλ‘ λΆλ¬μ€μ§ λͺ»νκ³ μμ΅λλ€.
λκ° λ¬Έμ μΌκΉμ..?
ν¨ν€μ§ ν΄λ μ€μ μ μ΄λ»κ² λμ΄μμ΄?
ν¨ν€μ§ ν΄λ μ€μ μ΄ λ λ§νλκ±°μΌ? μ λͺ¨λ₯΄κ² μ΄ γ γ
μ κΉλ§
νλ‘μ νΈ μΈν -> Packaging -> Packaging (κ³ κΈ μ΅μ μ΄κΈ°) -> List of maps to include in a packaged build <- μ¬κΈ°μ ν¨ν€μ§ν λ§΅ 리μ€νΈ μ€μ Additional Asset Directories to Cook <- μ¬κΈ°μ λ³λλ‘ ν¬ν¨ μν¬ μμ ν΄λ μΆκ° μΈλ¦¬μΌ4.26 κΈ°μ€μ΄κ³ μΈλ¦¬μΌ5λ λΉμ·ν κ±°μΌ
μ€ λλ€ μΌμ€ κ°μ¬ν©λλ€ νλ
μμ AssetManagerμ λ±λ‘ν ν΄λλ κ·ΈλΌ μ μλκ±°μ§..γ
ν΄κ²°μΆ