Replication 켜기

박정훈·2025년 3월 27일

언리얼 네트워크

목록 보기
5/7

유데미 과제: 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); //제일 중요
			//스태틱메시액터에 스태틱메시가 없으면, 게임 안에서 아무 것도 안 보임
		}
	}
}

0개의 댓글