ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1072)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (183)
      • Unreal (69)
      • Unity (103)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (348)
      • C++ (167)
      • C# (90)
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (9)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • 그래픽스
  • 티스토리챌린지
  • string
  • 유니티
  • 배열
  • C
  • 백준
  • 문자열
  • C++
  • 클래스
  • 프로그래머스
  • 언리얼
  • Unity
  • 알고리즘
  • SQL
  • 오블완
  • 포인터
  • 함수
  • c#
  • 파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

[Unreal] 멀티플레이 개념잡기 Replicated
게임엔진/Unreal

[Unreal] 멀티플레이 개념잡기 Replicated

2022. 11. 27. 14:44

정의

일반적인 게임들은 Steam에 연동하는 등의 플랫폼 작업이 뒤따르거나, DB에 현재 상태의 값을 저장하는 등 서버로서 필요한 작업이 더욱 많다. 다만 이러한 부분은 일단 제쳐두고 별다른 save data 없이 단판 게임으로서 멀티플레이 게임을 어떻게 만들 것인지 부터 생각해보자.

​

개인적으로는 dedicated server를 연습하기 위해 멀티플레이 개념을 잡고 있으므로 리슨 서버(listen server)에 대해서는 별도로 다루지 않는다.

​

참고로 Editor에서 dedicated server를 이용해 여러 클라이언트를 띄우려면 아래와 같이 설정하면 된다.

[멀티플레이어 옵션]에서 플레이어 수와 데디케이티드 서버 설정

Replicated 속성 적용하기

기본적으로 위의 그래프를 보면 replicated 속성은 아래 구조체에 적용할 수 있다.

- GameState

- PlayerState

- Pawn: Actor, Character 등

​

이번에 테스트를 해보기 위해 캐릭터의 body 색깔을 변경해보았다.

우선 설정은 아래와 같이 한다.

VisibleInstanceOnly를 설정한 후에 게임을 실행하면 아래와 같이 값이 표시된다.

- Visible : 단순히 값을 보여주기 위한 설정

- InstanceOnly : 인스턴스(게임) 실행 중에 보임

BodyColor에 VisibleInstanceOnly를 설정한 결과이다. 하지만 이것만 설정한다고해서 Replicated 속성을 사용할 수 있는 것이 아니다. (이대로 빌드하면 에러메시지가 발생한다.)

​

Replicated 속성을 사용하기 위해서는 GetLifetimeReplicatedProps() 함수에 Replicated할 속성값을 등록해줘야만 정상적으로 빌드를 할 수 있다.

그리고 DOREPLIFETIME은 [#include "Net/UnrealNetwork.h"]헤더를 사용하므로 까먹지말고 추가해주자.

참고로 해당 코드를 따라가보면 AActor에는 이미 override된 상태로 선언되어 있으므로 header에 별도의 선언없이 그냥 선언해서 사용해도 잘 작동한다. 랜덤하게 색깔을 변경하는 코드를 우선 아래와 같이 Constructor 에서 적용해보자.

Constructor에서는 ConstructorHelpers를 사용해서 UObject를 읽어온다. 이후 실행해보면 아래와 같이 될 것이다.

 

왜 서로 색깔이 다르게 보이는 것일까? 이유는 Constructor에서 BodyColor를 지정했다는데 있다. Actor(Pawn)의 Constructor에서는 아직 Server와 연결되어 있지 않은 상태이기 때문이다.

접속 프로세스는 아래 문서를 참고하자

https://docs.unrealengine.com/ko/Gameplay/Networking/Server/index.html

그렇다면 서버에 접속한 상태에서 실행시켜주면 제대로 색깔이 공유되겠다는 것을 쉽게 추측해볼 수 있다. 그러므로 Constructor에 구현해두었던 BodyColor를 바꾸는 로직을 BeginPlay로 옮겨보자.

Constructor가 아니므로 LoadObject를 통해 가져오면 된다.

출처 : [UE4] 멀티플레이 개념잡기, Replicated : 네이버 블로그 (naver.com)

저작자표시 (새창열림)

'게임엔진 > Unreal' 카테고리의 다른 글

[Unreal] Construction Script  (0) 2022.12.15
[Unreal] 클래스 블프 및 메쉬, 텍스처 등 로딩 Finder  (0) 2022.12.03
[Unreal] 디버깅용 드로워 이용 방법 (Draw Debug)  (0) 2022.11.22
[Unreal] UI(위젯)에서 메인 캐릭터 가져오기  (0) 2022.11.19
[Unreal] 포인터 널 체크는 조심히 하도록 하자  (0) 2022.10.21
    '게임엔진/Unreal' 카테고리의 다른 글
    • [Unreal] Construction Script
    • [Unreal] 클래스 블프 및 메쉬, 텍스처 등 로딩 Finder
    • [Unreal] 디버깅용 드로워 이용 방법 (Draw Debug)
    • [Unreal] UI(위젯)에서 메인 캐릭터 가져오기
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바