[UE5 서버] 서버의 권한

정우·2022년 8월 30일
0

[UE5 서버]

목록 보기
1/1
post-thumbnail

매 초마다 x방향으로 Speed만큼 이동

#include "MovingPlatforms.h"

AMovingPlatforms::AMovingPlatforms()
{
	PrimaryActorTick.bCanEverTick = true;

	SetMobility(EComponentMobility::Movable);
}

void AMovingPlatforms::BeginPlay()
{
	Super::BeginPlay();

	if (HasAuthority()) { // 자신이 서버인지 반환하는 함수 true 반환
		SetReplicates(true); 
		SetReplicateMovement(true); 
	}
}

void AMovingPlatforms::Tick(float dt)
{
	Super::Tick(dt);

	if (HasAuthority()) {
		FVector Location = GetActorLocation();
		Location += FVector(Speed * dt, 0, 0);
		SetActorLocation(Location);
	}
}

Replicates

  • Replicates를 적용하지 않으면, 클라이언트에서는 입력이 서버에게 전달되고 서버에서는 큐브의 이동경로에 큐브가 없어서 클라이언트에서 보면 큐브를 통과하는 것처럼 보인다.
  • 서버에서의 큐브 위치는 클라이언트로 전달되어 보이는 형체는 그대로지만, 마치 투명한 큐브가 움직이는 것처럼 막는다.

  • 서버

  • 클라이언트

서버대신 클라이언트에서 큐브 위치를 업데이트

#include "MovingPlatforms.h"

void AMovingPlatforms::Tick(float dt)
{
	Super::Tick(dt);

	if (!HasAuthority()) { // 서버가 아님 == 클라이언트
		FVector Location = GetActorLocation();
		Location += FVector(Speed * dt, 0, 0);
		SetActorLocation(Location);
	}
}
  • 클라이언트가 큐브 위치를 업데이트하면 서버에 전달하는 것이 아니기 때문에 클라이언트에서는 위치가 업데이트 되지만 서버에서는 업데이트가 되지 않는다.
  • 이때, 서버에서의 큐브 위치는 처음 위치 고정이기 때문에, 클라이언트에서도 처음 큐브 위치를 통과하지 못한다.

  • 클라이언트

  • 서버

결론

서버에서의 위치 업데이트는 항상 신뢰가능하고, 정확한 위치 이동이 가능하다. 
profile
개발 일기장

0개의 댓글