虚幻引擎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);