构造函数
由于Widget是由UE的反射系统创建的,其生命周期由UE引擎管理,所以并不存在构造函数,UE为Widget类定义了两个虚函数NativeConstruct 与 NativePreConstruct来充当构造函数的作用。而这两个函数的调用都必须在Widget被实例化之后才能进行调用
如何在Widget中获取角色
在蓝图节点中我们可以通过GetPlayerPawn来获得
而在C++代码中,需要传入一个UObject的实参。由于Widget是存在与用户界面而不是游戏逻辑。所以一般采用获取PlayerController来获取角色,当然如果使用的是HUD为父类就不用这么麻烦了
AXPlayerController* PlayerController = GetOwningPlayer<AXPlayerController>();
if (PlayerController)
{
// 获取PlayerController当前控制的Pawn
MyPawn = Cast<AXPawn>(PlayerController->GetPawn());
}
if (MyPawn == nullptr)
{
UE_LOG(LogTemp, Warning, TEXT("No Pawn!!!!!!!"));
return;
}
NativeConstruct 与 NativePreConstruct的调用先后顺序
NativePreConstruct先调用
当一个Widget类对象作为另外一个Widget的成员变量时,NativeConstruct 与 NativePreConstruct的调用顺序
XDebugMenuWidget类中有XCameraDebugWidget对象
XCameraDebugWidget类中有XSpinwithNameWidget对象
可以看到会从“子类”向“父类”依次创建