C++ 骨架网格组件返回空PTR(断点使用、空变量,可能设置变量不正确)

C++ 骨架网格组件返回空PTR(断点使用、空变量,可能设置变量不正确),c++,unreal-engine4,C++,Unreal Engine4,总结 问题是,当我尝试使用MSVS的本地Windows调试器启动引擎时,MSVS会触发一个断点,并告诉我由于某种原因骨架网格为空PTR。我不知道为什么。如果是因为我设置的变量不正确?请告诉我如何正确地做这件事 我编译并在编辑器中查找适当的更改,出于某种原因,一切正常,但当我尝试使用MSV打开编辑器时,它会触发一个断点,指示骨架网格为空。如果您有任何建议,我们将不胜感激。谢谢您的时间和耐心。如果我做的每件事都是正确的,那么它可能是一个bug…我不知道 这个。H .CPP构造函数 AMainChar

总结

问题是,当我尝试使用MSVS的本地Windows调试器启动引擎时,MSVS会触发一个断点,并告诉我由于某种原因骨架网格为空PTR。我不知道为什么。如果是因为我设置的变量不正确?请告诉我如何正确地做这件事

我编译并在编辑器中查找适当的更改,出于某种原因,一切正常,但当我尝试使用MSV打开编辑器时,它会触发一个断点,指示骨架网格为空。如果您有任何建议,我们将不胜感激。谢谢您的时间和耐心。如果我做的每件事都是正确的,那么它可能是一个bug…我不知道

这个。H

.CPP构造函数

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"));     
    }