成员变量在超出BeginPlay函数虚幻引擎的范围时丢失值c++



虚幻引擎4.23.0C++

当运行函数BeginPlay((时,我的成员变量_initialTransforms按预期很好地填充了所有内容,但当我离开BeginPlay(函数的范围进入DrawRobot(…,…(函数时,_initialTransforms会丢失其值,并再次变为空TArray。我检查了是否在另一个函数中意外更改了它的值,但这些是项目中_initialTransforms的唯一引用。该类派生自"AActor",对象是从拥有的"pawn"中创建的。该对象不会重新创建,因为它的构造函数不会运行两次。有人知道为什么会发生这种事吗?非常感谢。

以下代码的精简版本。

头文件

protected:
TArray<FMatrix> _initialTransforms;

cpp文件

void ARobot::BeginPlay()
{
Super::BeginPlay();
TArray<float> zeroArray;
zeroArray.Init(0, 6);
Forward(zeroArray, _initialTransforms);
}
void ARobot::Forward(TArray<float> jointsDeg, TArray<FMatrix>& m)
{...
}
void ARobot::DrawRobot(TArray<float> jointsDeg)
{
Forward(jointsDeg, _currentPose);
FTransform baseTransform = FTransform(ToLeftHanded(_currentPose[0] * _initialTransforms[0].Inverse()));
... }

正如George所提到的,GetDefaultObject不会返回实际对象。下面的函数确实如此,所以现在我可以轻松地获取和设置_s典当机器人的成员。

FActorSpawnParameters SpawnParams;
_spawnedRobot = GetWorld()->SpawnActor<ARobot>(SelectedRobot, location, rotation, SpawnParams);

最新更新