Unreal Engine - Standalone을 리슨 서버로 확장하기

2025. 3. 24. 23:43·Unreal Engine

1. Standalone 게임


아주 간단한 게임 로직을 하나 구성했다.

 

Goal 이라는 액터가 존재하고, 해당 액터에 플레이어가 닿으면 UserName과 WIN! 이라는 문구를 띄워주는 게임이다.

 

로직 설명

  • GameMode에서 Goal Actor를 하나 Spawn 해준다.

  • Goal 이라는 Actor에 Character가 overlap된 순간 PlayerController의 EndGame이라는 Event call해준다.

  • GameMode의 EndGame 함수는 PlayerController를 찾아서 PlayerController의 EndGame 이벤트를 call한다.

  • PlayerController에서는 Widget을 만들어주고 Widget의 EndGame 함수를 call해준다. 이후 add to viewport 해준다.

  • Widget의 EndGame함수는 아래와 같이 TextBlock의 값을 setting 해주는 로직을 가진다.

 

 

2. 리슨 서버로 확장


2 -1. 액터 리플리케이트

 

위에 처럼 구성한 후 플레이 방식을 리슨 서버로 바꾸고 실행하면 아래와 같은 모습을 볼 수 있다.

 

Client에서 Goal Actor가 보이지 않는 이유는 액터가 Replicate되어 있지 않기 때문이다.

Replicate 되도록 수정하면

아래와 같이 서버와 클라이언트 모두에서 보인다

 

2 - 2. UI 연동

 

이대로 실행하게 되면, UI는 항상 Server 역할을 하는 쪽에서만 출력되게 된다.

 

해결하기 위해서 아래 사진처럼

  • UI를 출력해주는 부분인 PlayerController의 EndGame 함수를 "소유중인 클라이언트에서 실행" 으로 수정해주고
  • 신뢰성을 체크해주면 된다.

 

추가) HOST와 GUEST의 이름을 출력하기

  • 먼저 Level BP에서 이름을 세팅하는 함수를 call 해준다.

  • Set User Name 함수는 "서버에서 실행"으로 세팅해주면 된다.

 

로직 정리)

  • 레벨 BP에서 SetUserName 이벤트("서버에서 실행") 을 통해 PlayerController의 UserName이라는 변수를 setting 한다.
  • 이후 Goal 이라는 Actor와 Player가 Overlap된 순간 
    • GameMode의 EndGame 이벤트를 실행하면서
    • PlayerController의 UserName 변수를 파라메터로 넣어준다.
  • GameMode의 EndGame 이벤트 ("replicate 되어있지 않음") 는 모든 PlayerController를 돌면서 각 PlayerController의 EndGame 이벤트(PlayerController의 이벤트, "소유중인 클라에서 실행")를 call한다.
  • PlayerController의 EndGame 이벤트는 위젯을 create하고 Widget의 EndGame 이벤트("replicate 되어 있지 않음")를 call한 후, widget을 add to viewport 해준다.

동작 모습)

 

 

3. 궁금증


  • "서버에서 실행"과 "소유 중인 클라이언트에서 실행"과 같은 리플리케이트 속성은 어떻게 지정해야 하는지와 각각 지정한 경우 어떤 식으로 값들이 세팅되는지
  • 레벨 BP의 서버와 클라에서의 동작 방식
    • 디버깅을 해보니
      • 서버의 Controller0 은 HOST로 
      • 서버의 Controller1은 GUEST로 초기화되어있고
      • 클라의 Controller0은 비어있다.
  • 아래 사진의 부분에서 서버나 클라이언트 어떤 쪽의 값을 가져오는 것인지
    • 클라이언트의 값을 가져와야 하는것 아닌가?
    • 근데 클라의 Controller UserName은 비어있다...

 

 

4. 팁


third person bp에서 아래와 같은 오류가 발생하면

 

Third Person BP의 IMC 세팅하는 부분에서 Is Locally Controlled 함수로 valid 체크를 한번 해주면 해결된다.

'Unreal Engine' 카테고리의 다른 글

Unreal Engine - 플러그인 만들기  (0) 2025.03.26
Unreal Engine - 야구 게임(리슨 서버)  (1) 2025.03.25
Unreal Engine - Gameplay Framework  (0) 2025.03.24
Unreal Engine - UObject  (0) 2025.03.24
Unreal Engine - 채팅 (리슨 서버)  (0) 2025.03.14
'Unreal Engine' 카테고리의 다른 글
  • Unreal Engine - 플러그인 만들기
  • Unreal Engine - 야구 게임(리슨 서버)
  • Unreal Engine - Gameplay Framework
  • Unreal Engine - UObject
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (189)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (32)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    additive animation
    상속
    applydamage
    actor 클래스
    BFS
    const
    싱글턴
    템플릿
    blend pose
    C++
    motion matching
    매크로 지정자
    gamestate
    addonscreendebugmessage
    map을 vector로 복사
    DP
    enhanced input system
    character animation
    Vector
    cin함수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
Unreal Engine - Standalone을 리슨 서버로 확장하기
상단으로

티스토리툴바