inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해

10강 캐릭터 공격 구현 개선

ServerRPCAttack_Implementation함수가 이해가 안갑니다.

112

작성자 없음

작성한 질문수 0

0

스크린샷 2024-12-22 203821.png.webp

제가 이해한 되로 정리해봤습니다. 다음 사진처럼
서버 상에서 모든 캐릭터는 Authority / Autonomous 역할을 갖는다고 이해했는데요. 하지만 코드를 보면

for (APlayerController* PlayerController : TActorRange<APlayerController>(GetWorld()))
{
	if (PlayerController && GetController() != PlayerController) //공격 명령을 내린 클라이언트와 대응되는 서버상의 액터를 제외시킴. 
	{
		if (!PlayerController->IsLocalController()) 
		{
			AABCharacterPlayer* OtherPlayer = Cast<AABCharacterPlayer>(PlayerController->GetPawn());
			if (OtherPlayer)
			{
				OtherPlayer->ClientRPCPlayAnimation(this);
			}
		}
	}
}

 

2번째 if문에서 Simulated Proxy 역할을 서버상에서 찾아서 ClientRPCPlayAnimation를 호출시킨다는게
이해가 안 갑니다.
서버에 Simulated Proxy가 없지 않나요?

unreal-engine 네트워크 언리얼-c++

답변 2

0

이득우

https://www.inflearn.com/community/questions/1088455
네 동일한 질문이 있으니 참고하시면 될 것 같습니다.
정리하면 두 번째 if문의 경우 서버 머신을 대표하는 플레이어 컨트롤러는 이미 애니메이션을 재생했으니 통신할 필요가 없어 걸렀다고 생각하면 됩니다.

0

인프런 AI 인턴

안녕하세요, 임성우님. 인프런 AI 인턴입니다.

귀하께서 올려주신 질문은 언리얼 엔진의 네트워크 구조에 대한 이해를 바탕으로 설명드리겠습니다.

언리얼 엔진의 네트워크 시스템에서 각 캐릭터는 서버와 클라이언트 간에 다양한 역할을 가지게 됩니다. 서버는 일반적으로 모든 캐릭터에 대한 Authority 역할을 수행합니다. 즉, 모든 캐릭터에 대한 메인 컨트롤과 데이터 처리가 서버에서 이루어집니다. 하지만 서버에서도 멀티플레이어 게임을 관리할 때 각 클라이언트의 상태를 따라가고 동기화하기 위해 이와 같은 코드 구문을 사용하게 됩니다.

귀하께서 언급한 코드의 IsLocalController() 함수는 클라이언트 측에서의 역할 분배를 확인하는 데 사용됩니다. 이 코드의 목적인 ClientRPC 명령을 적절한 클라이언트에 보내는 것이며, Simulated Proxy는 서버에서 관리되는 각 클라이언트의 상태를 의미합니다.

IsLocalController는 주로 클라이언트가 특정 PlayerController가 로컬 플레이어를 제어하는지 여부를 확인하는 용도로 사용됩니다. 따라서 이 코드는 클라이언트 환경에서 올바른 플레이어에게 명령을 전달하기 위해 작성된 것입니다.

고로, ‘서버에도 Simulated Proxy가 없다’는 관점보다는, 서버가 클라이언트를 먼저 식별하고, 필요 시 해당 클라이언트에게 특정 작업을 전달하기 위해 이렇게 작동한다고 보실 수 있습니다.

이해를 돕기 위해 유사한 질문들에 대한 답변 링크도 제공드립니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

5.6버전 Networking Insights 실행안됨 문제에 관하여

0

29

1

8강 중간, 분수대의 SetOwner 에 대해 궁금합니다.

0

77

2

플레이어(Actor) 로 (리슨)서버에서 생성 되나요?

0

99

2

2강) HandleBeginPlay 의 역활이 궁금합니다.

-1

72

2

3강 중간, 모드 로그로 찍을 시 스탠드얼론이 안찍힙니다.

1

76

2

CompressedFlag 질문

0

58

2

10강까지 머리 위 체력바가 표시가 안됩니다.

0

109

3

10강까지 머리 위 체력바가 표시가 안됩니다.

0

95

2

16:44 부분에서 질문이 있습니다.

0

104

2

12:50 NetMulticast RPC 커넥션 관려하여 질문이 있습니다.

0

121

2

github 3-5 파트 프로젝트에서 컴파일 에러가 발생합니다.

0

116

3

언리얼 인사이트 5.6버전 networking insights 가 뜨지 않습니다.

0

164

3

Insight 사용이 안되어서 문의 드립니다!

0

129

2

하위 레벨...?? High Level 말씀하신거죠..??

0

146

1

CompressedFlags를 이용한 InputThrottle, InputSteering 전달 방법 질문

0

190

1

조건식 프로퍼티 리플리케이션 질문

0

144

2

ArenaBattle에 Log추가하는 곳에 에러가 나타나 질문 드립니다.

0

160

2

7강에서 DORM_Initial 안됨

0

128

3

안녕하세요 강의 내용 정리에 관련해서 질문있어요

0

131

2

캐릭터 클래스의 mesh 관련

0

132

2

3파트 6강 분수대 로테이트에 문제가 생겼습니다.

0

131

3

클라이언트의 오너십 설정에 대해서 궁금합니다.

0

201

3

프로퍼티 리플리케이트 동기화 보장 개념.

0

225

2

결국엔 액터 기본함수들은 어디든 똑같이 일단 실행되는건가요?

0

91

2