I will try to keep it short and clear. There is a Actor BP, inherits from a AActor cpp class. This class has a widget load function( filled in BP event graph) e.g.
**
UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
void add_soldier_widget_function();
**
This widget BP function called in beginplay. e.g.
**
void Abuild_army::BeginPlay()
{
Super::BeginPlay();
add_soldier_widget_function();
}
**
There is no issue until there. When level start to begin, widget loads and buttons appears. I want to add soldier_object to array when i press to button. There is 3 button shows up.
Add infantry
Add archer
Add cavalry
When i press “Add infantry” button, it calls a named “on_click_add_soldier_1()” function. In the function statements,i am casting my AActor ( Abuild_army) class. And calling its public add_infantry() function.
**
void Uadd_soldier_widget::on_click_add_soldier_1()
{
Abuild_army* build_army = Cast<Abuild_army>(this);
build_army->add_infantry();
UE_LOG(LogTemp, Warning, TEXT("on_click_add_soldier_1 LOG"));
}
**
Here is the add_infantry() function :
**
void Abuild_army::add_infantry()
{
Ukalkan* kalkan = NewObject(this); //Uobject
Ubot* bot = NewObject(this); //Uobject
Ubileklik* bileklik = NewObject(this); //Uobject
Ukask* kask = NewObject(this); //Uobject
Uzirh* zirh = NewObject(this); //Uobject
Ukilic* kilic = NewObject(this); //Uobject
Ainfantry_actor* piyade = NewObject<Ainfantry_actor>(this); //AActor base class
if(this->level==1)
{
kask->level = 1;
zirh->level = 1;
bot->level = 1;
bileklik->level = 1;
kalkan->level = 1;
kilic->level = 1;
piyade->helmet = kask;
piyade->armor = zirh;
piyade->boot = bot;
piyade->wristle = bileklik;
piyade->shield = kalkan;
piyade->melee_weapon = kilic;
piyade->set_AP();
piyade->set_DP();
}
else if(this->level==2)
{
kask->level = 2;
zirh->level = 2;
bot->level = 2;
bileklik->level = 2;
kalkan->level = 2;
kilic->level = 2;
piyade->helmet = kask;
piyade->armor = zirh;
piyade->boot = bot;
piyade->wristle = bileklik;
piyade->shield = kalkan;
piyade->melee_weapon = kilic;
piyade->set_AP();
piyade->set_DP();
}
else if(this->level == 3)
{
kask->level = 3;
zirh->level = 3;
bot->level = 3;
bileklik->level = 3;
kalkan->level = 3;
kilic->level = 3;
piyade->helmet = kask;
piyade->armor = zirh;
piyade->boot = bot;
piyade->wristle = bileklik;
piyade->shield = kalkan;
piyade->melee_weapon = kilic;
piyade->set_AP();
piyade->set_DP();
}
infantry_arr.Add(piyade);
UE_LOG(LogTemp, Warning, TEXT("infantry added "));
}
**
In this moment editor crashes, and shows these logs :
Fatal error: [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/CoreUObject/Private/UObject/UObjectGlobals.cpp] [Line: 2262] Object is not packaged: kalkan None <— kalkan is a “shield object” inherits from UObject
UE4Editor_MyProject!Abuild_army::add_infantry() [C:\Users\kadir\Documents\Unreal Projects\MyProject 4.26\Source\MyProject\combat\denemes\build_army.cpp:176] <— line 176 is : ** Ubot* bot = NewObject(this); **
UE4Editor_MyProject!Uadd_soldier_widget::on_click_add_soldier_1() [C:\Users\kadir\Documents\Unreal Projects\MyProject 4.26\Source\MyProject\combat\UI\add_soldier_widget.cpp:24] <— UE_LOG(LogTemp, Warning, TEXT(“on_click_add_soldier_1 LOG”));
My question is, how can i cast uobjects or what i am missing here?. These all “kalkan” , “bot”, “bileklik”, “kask”, “zirh”, “kilic” objects are Uobjects and contains 3 properties and 1 function. But these properties are affect the armor and attack points.
Thanks in advance.