유데미 과제: Turn on replication for the Static Mesh Actor
//h
UPROPERTY(EditAnywhere)
UStaticMesh* SphereMesh;
//cpp
//...
AStaticMeshActor* StaticMeshActor = GetWorld()->SpawnActor<AStaticMeshActor>(AStaticMeshActor::StaticClass());
if (StaticMeshActor)
{
}
//...
여기서 Static Mesh Actor의 replication을 키는 게 과제다.
처음엔 UPROPERTY(EditAnywhere)를 UPROPERTY(Replicated, EditAnywhere) 이렇게 바꾸고 뭘 해야될지 몰랐는데(이렇게 하면 빌드 오류 남), 정답을 알고 나니 UPROPERTY는 건드리는 게 아니었고 아래처럼 cpp에서 'Set어쩌고'로 바꿔주는 거였다..!
if(StaticMeshActor)
{
StaticMeshActor->SetReplicates(true);
StaticMeshActor->SetReplicateMovement(true);
StaticMeshActor->SetMobility(EComponentMobility::Movable) //괄호 안에 ENum타입,
//해당 액터나 컴포넌트의 이동 가능 설정을 "Movable"로 변경하는 함수 호출
//이를 통해 게임 실행 중에 객체가 자유롭게 위치나 회전 등을 변경할 수 있도록 함
//반대로 "Static"은 움직이지 않는 객체에 사용되고, "Stationary"는 제한적인 이동만 허용
FVector SpawnLocation = GetActorLocation() +
GetActorRotation().Vector() * 100.f + GetActorUpVector() * 50.f;
StaticMeshActor->SetActorLocation(SpawnLocation);
UStaticMeshComponent* StaticMeshComponent = StaticMeshActor->GetStaticMeshComponent();
if (StaticMeshComponent)
{
StaticMeshComponent->SetIsReplicated(true);
StaticMeshComponent->SetSimulatePhysics(true);
if (SphereMesh)
{
StaticMeshComponent->SetStaticMesh(SphereMesh); //제일 중요
//스태틱메시액터에 스태틱메시가 없으면, 게임 안에서 아무 것도 안 보임
}
}
}