Hi, first post, getting into UE4.9, been through the programming tutorial (battery collector).
My issue is this: Having made a C++ actor class, and then created a blueprint class from it, it seems that changes in C++ code propagate to Blueprint in a very weird way. I have the following function:
void AAsteroid::SplitIntoPieces()
{
//FRotator Direction1(0.f, 0.f, FMath::FRandRange(0.f, 360.f));
FRotator Direction1(0.f, 0.f, 60.f);
FRotator Direction2(0.f, 0.f, FMath::FRandRange(0.f, 360.f));
UWorld* World = GetWorld();
if (World && bSpawnChildren)
{
AAsteroid* Child1 = World->SpawnActor<AAsteroid>(GetClass(), GetActorLocation() + FVector(10, 0, 0), Direction1);
AAsteroid* Child2 = World->SpawnActor<AAsteroid>(GetClass(), GetActorLocation() + FVector(-10, 0, 0), Direction2);
//Child1->BodyMeshComponent->SetStaticMesh(BodyMeshComponent->StaticMesh);
//Child2->BodyMeshComponent->SetStaticMesh(BodyMeshComponent->StaticMesh);
UE_LOG(LogTemp, Warning, TEXT("Spawning children %s and %s"), *Child1->GetName(), *Child2->GetName());
if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Red, "Rotators: " + Direction2.Vector().ToString());
Destroy();
}
}
Earlier, the Direction2 variable was set to (0, 0, -90) and Direction1 to (0, 0, 90). After changing this and recompiling, they still behave like that, even though I’ve changed the values. And the weird part: I added the “if (GEngine)…” line just now, and that one did propagate! So I don’t know, common sense does not seem to work. The logging line proves that the new version of the function is used. However, the values of the direction variables seem “cached”? I don’t know how this works. I did restart the editor, still nothing, and replace the actor in the scene, and recompile the blueprint. Here is the UFUNCTION declaration for that function:
UFUNCTION(BlueprintCallable, Category = "Death", meta = (AllowPrivateAccess = "true"))
void SplitIntoPieces();
In case that changes anything. What do I need to do to make the code changes propagate?