C++ 骨架网格组件返回空PTR(断点使用、空变量,可能设置变量不正确)
总结 问题是,当我尝试使用MSVS的本地Windows调试器启动引擎时,MSVS会触发一个断点,并告诉我由于某种原因骨架网格为空PTR。我不知道为什么。如果是因为我设置的变量不正确?请告诉我如何正确地做这件事 我编译并在编辑器中查找适当的更改,出于某种原因,一切正常,但当我尝试使用MSV打开编辑器时,它会触发一个断点,指示骨架网格为空。如果您有任何建议,我们将不胜感激。谢谢您的时间和耐心。如果我做的每件事都是正确的,那么它可能是一个bug…我不知道 这个。H .CPP构造函数C++ 骨架网格组件返回空PTR(断点使用、空变量,可能设置变量不正确),c++,unreal-engine4,C++,Unreal Engine4,总结 问题是,当我尝试使用MSVS的本地Windows调试器启动引擎时,MSVS会触发一个断点,并告诉我由于某种原因骨架网格为空PTR。我不知道为什么。如果是因为我设置的变量不正确?请告诉我如何正确地做这件事 我编译并在编辑器中查找适当的更改,出于某种原因,一切正常,但当我尝试使用MSV打开编辑器时,它会触发一个断点,指示骨架网格为空。如果您有任何建议,我们将不胜感激。谢谢您的时间和耐心。如果我做的每件事都是正确的,那么它可能是一个bug…我不知道 这个。H .CPP构造函数 AMainChar
AMainCharacter::AMainCharacter()
{
RootComponent=GetCapsuleComponent();
GetMesh()->SetupAttachment(RootComponent);
/*这就是NULL PTR错误开始的地方
EnemyWeaponBase网格返回空值*/
EnemyWeaponBaseMesh=CreateDefaultSubobject
(文本(“Enemy武器基地”);
EnemyWeaponBaseMesh->AttachToComponent(骷髅右臂、,
FAttachmentTransformRules::SnapToTargetInIncludingScale,
FName(“Enemy武器基地”);
SkeletonRightArm=CreateDefaultSubobject
(文本(“右臂骨架”);
SkeletonRightArm->AttachToComponent(GetMesh(),
FAttachmentTransformRules::SnapToTargetInIncludingScale,
FName(“RightShoulderSocket”);
}
首先,ACharacter
是一个引擎类,您不应该修改它,而是应该拥有该类的子类并修改它。如果已经对其进行了子类化,则无需将CapulseComponent的附件设置为RootComponent。它已经是RootComponent,网格也是如此
其次,应该在构造函数中使用SetupAttachment()
而不是AttachToComponent()
在使用指针之前一定要检查它们的有效性。我不知道ACharacter是一个子类,我会编辑这篇文章。我也照你说的做了,由于某些原因,敌人的武器基础网格仍然为空。我按照你说的做了,msvs现在能够启动ue4编辑器,因为我想我没有正确设置变量,所以现在变量不再为空。非常感谢你的帮助!:D
//Here is the .h File where the variables are.
AMainCharacter();
UPROPERTY(EditAnywhere, Category = "EnemyWeaponBaseMesh")
class USkeletalMeshComponent* EnemyWeaponBaseMesh;
UPROPERTY(EditAnywhere, Category = "SkeletonRightArm ")
class USkeletalMeshComponent* SkeletonRightArm;
AMainCharacter::AMainCharacter()
{
RootComponent = GetCapsuleComponent();
GetMesh()->SetupAttachment(RootComponent);
/*This is where the NULL PTR error starts. The debugger says that
EnemyWeaponBase Mesh Returns NULL.*/
EnemyWeaponBaseMesh = CreateDefaultSubobject<USkeletalMeshComponent>
(TEXT("EnemyWeaponBase"));
EnemyWeaponBaseMesh->AttachToComponent(SkeletonRightArm,
FAttachmentTransformRules::SnapToTargetIncludingScale,
FName("EnemyWeaponBase"));
SkeletonRightArm = CreateDefaultSubobject<USkeletalMeshComponent>
(TEXT("RightArmSkeleton"));
SkeletonRightArm->AttachToComponent(GetMesh(),
FAttachmentTransformRules::SnapToTargetIncludingScale,
FName("RightShoulderSocket"));
}