관리 메뉴

fatalite

Unreal Network & Multiplayer Game 본문

게임/Unreal Multi Player

Unreal Network & Multiplayer Game

fataliteforu 2023. 7. 17. 17:03

Dedicated Server을 기준으로 설명한다.

 


Unreal Network Overview Diagram


Network Role

위와 같은 다이어 그램에서, 더욱 소유권에 대해서 상세히 서술한 것이다.

 

서버는 게임의 액터의 Authority이다.

액터의 소유주의 Role은 AutonomousProxy이다.

액터의 소유주가 아닌 플레이어는 Role로, SimulatedProxy를 지닌다.


Reliable

간단하게 서술하면,

UFUNCTION(Server, Reliable)
void ServerEquipButtonPressed();

다음과 같은 코드로 속성을 부여하면, 이 함수의 신뢰성을 확보한다. 

곧, 실행을 보장한다고 볼 수 있을 것 같다.


Replication

void 어떤 함수::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const {
	Super::GetLifetimeReplicatedProps(OutLifetimeProps);

	//Overlapping Weapon Replicate
	DOREPLIFETIME_CONDITION(ADedicatedFPSCharacter, OverlappingWeapon, COND_OwnerOnly);

	//현재 체력 리플리케이트
	DOREPLIFETIME(ADedicatedFPSCharacter, CurrentHealth);
	
	//현재 장비 리플리케이트
	DOREPLIFETIME(ADedicatedFPSCharacter, CharacterEquipment);
}

Replication은, GetLifetimeReplicatedProps를 통해서, 아래와 같은 해당 객체의 프로퍼티가 바뀌었을 때,

// (1)
UPROPERTY(ReplicatedUsing = OnRep_CurrentHealth) 
float CurrentHealth;

// (2)
UPROPERTY(Replicated)
ECharacterEquipment CharacterEquipment;

클라이언트로 하여금 Notify(알림)해준다.

그럼 받은 알림을 구현할 수 있다.

변수 값만 바꿔도 되고 또 다른 로직을 작성해도 된다.

	/*Rep Notify Functions*/
	UFUNCTION()
	void OnRep_CurrentHealth();

	UFUNCTION()
	void OnRep_CharacterEquipment();

	UFUNCTION()
	void OnRep_OverlappingWeapon(AWeapon* LastWeapon);

RPCs

Remote Procedure Call의 약자로, 원격 함수 호출 정도로 생각하면 된다.

무슨 말이냐 하면, 

일단 객체 리플리케이션을 모든 이벤트에 할 수 없기 때문에,

어떤 일이 일어나면 무엇을 한다에 해당 되며

서버나 클라이언트에서 일어나는 것을 다른 클라이언트나 서버에 반영하기 위해서 사용한다.

다음과 같은 경우가 있다.

//Client to Server
UFUNCTION(Server, Reliable)

//Server To One Client
UFUNCTION(Client, Reliable)

//Server To Many Clients
UFUNCTION(NetMulticast, Reliable)

 

'게임 > Unreal Multi Player' 카테고리의 다른 글

TArray<struct>가 Replication 안될 때  (0) 2023.08.03