본문 바로가기
Unreal Engine4 or 5/Network

블루프린트 네트워킹 튜토리얼

by 눈야옹 2023. 12. 9.

https://www.unrealengine.com/ko/blog/blueprint-networking-tutorials

 

 

1.서버의 종류.

a. Listen Server: 플레이어컴퓨터에서 서버가 열리며, 플레이어도 같이 플레이한다. (마인크래프트 방만들어서 초대해 같이 플레이 하는것)

Server + Client, 랜더링이 일어나며 키입력또한 받는다.

b. Dedicated Server:  랜더링 없으므로 오로지 게임 관련 로직이 돌아 최적화가 잘되어 있다. 비용이 싸다. 그래서 서버용 실행파일을 따로 만들어 특수 로직을 포함시켜 치팅에 방지가 되게 만들수도 있다.

Server, 랜더링 x 

데디케이트 서버의 구조에서 존재 하게 되는 엑터들.

  Pawn PlayerController PlayerState
Dedicated Server O X O
Client O O O

그래서 이상적인 구성으로 
플레이어의 입력 처리등은 PlayerController를 통해서 처리하고
플레이어의 체력이나 상태등은 PlayerState에 저장하여 넘기고 왔다갔다하며 Pawn에서 받아와서 처리하기도 한다.

 

2. Replication

- 기본적으로 리플리 케이션을 할 Actor의 경우 Replicates옵션을 켜주어야 한다.

- 서버와 클라이언트가 주고 받는 명령들을 통칭해서 사용한다.

- 변수 옵션에서는 3가지가있다.

a. None :  Replication을 하지 않는다.

b. Replicated : 계속 리플리케이션 한다.(네트워크 비용의 증가. 하지만 계속 적인 체크가 된다.)

c. RepNotify : 값의 변화가 있을 시에만 리플리케이션 한다.( 네트워크 비용의 선택적 감소, 값의 전달이 미루어 질수도 있다.)

- 함수(이벤트) 에서는 4가지가 있다.

 

a. Not Replicated : 서버와 통신하지 않는다.

b. Multicast : 이 이벤트를 서버에서 다른곳으로 Replicate 합니다. (Server -> Other)

c. Run on server : 이 이벤트를 넷 소유의 클라이언트에서 서버로 Replicate합니다. (Client -> Server)

d. Run on owning Client : 이 이벤트를 서버에서 소유 클라이언트로 Replicate시킵니다. (Server -> Client)

 

e. 신뢰성(Reliable)체크

신뢰성 체크가 되었다면 꼭 실행 시킨다.

ex) 캐릭터 체인지나 아이템 스폰과 같이 한번 일어나는데 꼭 일어나야하는 중요한 이벤트의 경우 체크하지만 파티클이나 효과같은 꼭 필요한 것이 아니라면 체크를 헤제 하여도 된다.

 

 

 

3. Authority와 Remote

- 로직상 Authority경로를 타는경우 서버에서만 도는 경우이구 Remote는 기본 적인 유저의 로직으로 돌린다.

- 예를 들어 UHD를 그리는 로직은 서버엔 필요 없는 로직이라 Remote만 타고

- 몬스터리스폰 등 엑터의 스폰은 서버가 관리하기 떄문에 Authority 로직을 타게 만들면 된다.

 

추가적으로 Single 게임이 아닌 네트워크에서 Owner와 player Contoller를 비교하면 내 Client에서 실행되는지 다른 Client에서 실행 되는지 구분할수 있다. (Common Macro로 만들어서 쓰면 편하다. - Actor상속)

 

 

4. 표식

서버 옆에 번개 표식은 이 노드는 오직 서버에서만 돌며 클라이언트에서는 아무 것도 하지 않는 것이다.

 

또한 모니터 표시에 번개표시는 이 노드 이후에 진해되는 노드는 모니터상에 랜더링 되는 것을 뜻하는 표식이다.

 

그리고 함수 옆에 공이 두개가 있다는건 Replication된 변수라는 뜻이다. 

 

*주의점

 - Replication관련 옵션에서  Replicated와 RepNotify는 차이가 있는데.
Replicated: 계속 감지하고
RepNotify: 변화가 있을때에만 감지한다.

- C++에서는 RepNotify는 수동으로 호출해줘야 하지만 블루 프린트에서는 자동으로 인식하게 되어있다.

 

만약 한번만 실행이 되어진다면 그것은 할수호출 리플리케이션이 적절하다.(폭발 같은 일시적인것)

하지만 계속 유지되어 지는것은 변수 리플리케이션을 사용하는것이 좋다.

 

-Spwan과 관련하여..

만약 자기 자신이 스폰시키는 아이템이고 그 스폰 로직의 실행 위치가 Pawn이나 Actor 이라면 Owner에 Controller를 넣어주며, Controller에서 스폰할경우 Self를 널어주면된다.

 

 

 

 

 

Test 겸 만든 Item Spawn Blueprint