Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- server
- UMG
- uproperty
- 코테
- Unity
- 재귀
- blueprint
- 유니티
- 언리얼4
- UE4
- 코테연습
- UnReal
- AIPerception
- 나나이트
- ue4macro
- 언리얼
- 프로그래머스
- 코딩테스트
- DP
- UE5
- 다이나믹프로그래밍
- dfs
- 동적계획법
- Widget
- Stimuli
- HTTP
- EffectiveC++
- 문자열
- 알고리즘
- c++
Archives
- Today
- Total
공부 기록
[UE4] 멀티 플레이 이벤트 복제 방법 (Replicate) 본문
Replication 개념
- 클라이언트에서 서버에 복제 명령 ▶ 서버에서 클라이언트들에 전달 ▶ 모든 클라이언트에서 실행
Role / Remote Role
- 실행되는 주체가 서버인지, 클라이언트인지 구분하여 각각에서 실행될 이벤트를 제어
- 서버 (ROLE_Authority) / 클라이언트 (ROLE_SimulatedProxy)
- 자신은 Role, 상대는 RemoteRole (ex. 서버는 Role 값이 ROLE_Authority, RomoteRole 값이 ROLE_SimulatiedProxy)
아래는 각각 블루프린트와 C++ 스크립트에서의 Replicate 구현 방법이다.
[Blueprint Replicate]
1. 복제할 이벤트 노드의 디테일 패널에서 Replicates - multicast 로 설정
2. Replicates - Run on server 타입 이벤트에서 복제할 이벤트 (multicast) 호출
3. 이벤트를 실행하고 싶은 곳에서 Server Event 이벤트 호출
참고로 Replicate는 플레이어가 소유하고 있는 액터에서만 실행할 수 있다.
따라서 이벤트 구현은 반드시 player controller 혹은 컨트롤러와 연결된 액터에 구현하여야 한다. (ex. pawn)
다만 서버에 복제 명령을 전달하는 과정(3번)은 어느 곳에서 하든 상관없다.
[C++ Replicate]
헤더파일.h
int num;
void SetInt(int n);
UFUNCTION(reliable, server, WithValidation)
void ServerSetInt(int n);
실행파일.cpp
void AMyController::SetInt(int n)
{
// 클라이언트 변수에 값 할당
num = n;
// 클라이언트인지 서버인지 구분
if (Role == ROLE_SimulatedProxy)
{
ServerSetInt(n);
}
}
bool AMyController::ServerSetInt_Validate(int n)
{
return true;
}
void AMyController::ServerSetInt_Implementation(int n)
{
// 클라이언트가 네트워크를 통해 호출한 서버에서 실행되는 함수 (Role == ROLE_Authority)
// 서버에서 실행되므로 아래 함수에서는 ServerSetInt가 실행되지 않고 변수값만 변경
SetInt(n);
}
'Unreal > Blueprint' 카테고리의 다른 글
[UE4] AI Perception 사용 방법 (0) | 2022.05.26 |
---|---|
[UE4] 커스텀 위젯을 위젯 컴포넌트로 사용하기 (UMG) (0) | 2022.03.29 |
[UE4] 다른 블루프린트의 함수 호출하기 (블루프린트 간 통신) (0) | 2022.02.03 |
Comments