本文主要是介绍ue4 修改父类组件创建类型或让父类不创建组件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
修改父类组件创建类型或让父类不创建组件:
通过AMyCharacter::AMyCharacter(const FObjectInitializer& ObjectInitializer)格式的构造函数,后面采用以下形式:
AMyCharacter::AMyCharacter(const FObjectInitializer& ObjectInitializer) :Super(ObjectInitializer.DoNotCreateDefaultSubobject(ACharacter::CapsuleComponentName).SetDefaultSubobjectClass<UMocapSkeletalMeshComponent>(ACharacter::MeshComponentName)) { PrimaryActorTick.bCanEverTick = true; } |
其父类为ACharacter:
ACharacter::ACharacter(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { ....... CharacterMovement = CreateDefaultSubobject<UCharacterMovementComponent>(ACharacter::CharacterMovementComponentName); if (CharacterMovement) { CharacterMovement->UpdatedComponent = CapsuleComponent; CrouchedEyeHeight = CharacterMovement->CrouchedHalfHeight * 0.80f; } Mesh = CreateOptionalDefaultSubobject<USkeletalMeshComponent>(ACharacter::MeshComponentName); if (Mesh) { Mesh->AlwaysLoadOnClient = true; Mesh->AlwaysLoadOnServer = true; Mesh->bOwnerNoSee = false; Mesh->VisibilityBasedAnimTickOption = EVisibilityBasedAnimTickOption::AlwaysTickPose; Mesh->bCastDynamicShadow = true; Mesh->bAffectDynamicIndirectLighting = true; Mesh->PrimaryComponentTick.TickGroup = TG_PrePhysics; Mesh->SetupAttachment(CapsuleComponent); static FName MeshCollisionProfileName(TEXT("CharacterMesh")); Mesh->SetCollisionProfileName(MeshCollisionProfileName); Mesh->SetGenerateOverlapEvents(false); Mesh->SetCanEverAffectNavigation(false); } } |
ObjectInitializer.DoNotCreateDefaultSubobject 对 父类构造函数中CreateOptionalDefaultSubobject起着作用, 这个函数会根据ObjectInitializer是否设置了DoNotCreateDefaultSubobject决定是否创建给定名称的子对象,如果设置了,则CreateOptionalDefaultSubobject 返回null,ObjectInitializer.DoNotCreateDefaultSubobject 对CreateDefaultSubobject中不起作用
ObjectInitializer.SetDefaultSubobjectClass 决定了CreateDefaultSubobject和CreateOptionalDefaultSubobject创建指定子对象时,覆盖其指定的子对象的创建类型,当然覆盖的类型必须是指定的类型子类型。 如果父类的构造函数已经为父类的父类设置过SetDefaultSubobjectClass, 则当前SetDefaultSubobjectClass设置的类必须是父类设置的SetDefaultSubobjectClass类的子类。
这篇关于ue4 修改父类组件创建类型或让父类不创建组件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!