void UChildActorComponent::OnRegister() { Super::OnRegister(); if (ChildActor) { if (ChildActor->GetClass() != ChildActorClass) { DestroyChildActor(); CreateChildActor(); } else { ChildActorName = ChildActor->GetFName(); USceneComponent* ChildRoot = ChildActor->GetRootComponent(); if (ChildRoot && ChildRoot->GetAttachParent() != this) { // attach new actor to this component // we can't attach in CreateChildActor since it has intermediate Mobility set up // causing spam with inconsistent mobility set up // so moving Attach to happen in Register ChildRoot->AttachToComponent(this, FAttachmentTransformRules::SnapToTargetNotIncludingScale); } // Ensure the components replication is correctly initialized SetIsReplicated(ChildActor->GetIsReplicated()); } } else if (ChildActorClass) { CreateChildActor(); } }
void UChildActorComponent::OnRegister() { Super::OnRegister(); if (ChildActor) { if (ChildActor->GetClass() != ChildActorClass) { DestroyChildActor(); CreateChildActor(); } else { ChildActorName = ChildActor->GetFName(); USceneComponent* ChildRoot = ChildActor->GetRootComponent(); if (ChildRoot && ChildRoot->GetAttachParent() != this) { // attach new actor to this component // we can't attach in CreateChildActor since it has intermediate Mobility set up // causing spam with inconsistent mobility set up // so moving Attach to happen in Register ChildRoot->AttachTo(this, NAME_None, EAttachLocation::SnapToTarget); } } } else if (ChildActorClass) { CreateChildActor(); } }
void UChildActorComponent::SetChildActorClass(TSubclassOf<AActor> Class) { ChildActorClass = Class; if (IsRegistered()) { DestroyChildActor(); CreateChildActor(); } }
void UChildActorComponent::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) { Super::PostEditChangeProperty(PropertyChangedEvent); static const FName NAME_ChildActorClass = GET_MEMBER_NAME_CHECKED(UChildActorComponent, ChildActorClass); if (PropertyChangedEvent.Property && PropertyChangedEvent.Property->GetFName() == NAME_ChildActorClass) { DestroyChildActor(); CreateChildActor(); } }
void UChildActorComponent::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) { static const FName NAME_ChildActorClass = GET_MEMBER_NAME_CHECKED(UChildActorComponent, ChildActorClass); if (PropertyChangedEvent.Property && PropertyChangedEvent.Property->GetFName() == NAME_ChildActorClass) { ChildActorName = NAME_None; // If this was created by construction script, the post edit change super call will destroy it anyways if (!IsCreatedByConstructionScript()) { DestroyChildActor(); CreateChildActor(); } } Super::PostEditChangeProperty(PropertyChangedEvent); }
void UChildActorComponent::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) { if (PropertyChangedEvent.Property && PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED(UChildActorComponent, ChildActorClass)) { ChildActorName = NAME_None; if (!IsTemplate()) { UChildActorComponent* Archetype = CastChecked<UChildActorComponent>(GetArchetype()); ChildActorTemplate = (Archetype->ChildActorClass == ChildActorClass ? Archetype->ChildActorTemplate : nullptr); } // If this was created by construction script, the post edit change super call will destroy it anyways if (!IsCreatedByConstructionScript()) { DestroyChildActor(); CreateChildActor(); } } Super::PostEditChangeProperty(PropertyChangedEvent); }
void UChildActorComponent::OnComponentCreated() { Super::OnComponentCreated(); CreateChildActor(); }