언리얼 엔진 5.3에 PubNub로 리얼타임 기능 추가하기
Published: 2024-03-08 07:27:08

언리얼 엔진(UE) 5.3 멀티플레이어 또는 [온라인 게임에](https://www.pubnub.com/solutions/gaming/) 리얼타임 기능을 추가하고 싶으시다면, 잘 찾아오셨습니다. PubNub는 지연 시간이 짧은 메시징과 확장성을 보장하며, 게임 내 채팅, 온라인 상태 감지, 친구 목록, 점수 시스템, 리더보드 등의 소셜 기능을 실시간으로 제공하여 플레이어 경험을 향상시킵니다. 유니티는 Windows, Mac, iOS, Android, Oculus, 메타 퀘스트와 같은 가상 현실 시스템, 크로스 플랫폼 개발 등 다양한 플랫폼에서 실시간 상호작용을 위한 게임의 인프라 계층을 관리하므로 개발자는 애플리케이션에만 집중할 수 있습니다.

펍넙의 [언리얼 엔진 모듈을](https://github.com/pubnub/c-core/tree/master/unreal) 사용하여 이러한 리얼타임 기능 등을 UE 게임에 구현하는 방법을 계속 읽어보세요.

언리얼 엔진 플러그인은 아직 개발 초기 단계이므로 피드백을 이메일( [devrel@pubnub.com](mailto:devrel@pubnub.com) )로 보내주시거나 [GitHub 저장소에](https://www.pubnub.com/how-to/admin-portal-presence/) 풀 리퀘스트/이슈를 제출해 주시기 바랍니다.

전제 조건
-----

시작하기 전에 몇 가지 준비해야 할 사항이 있습니다:

1.  [언리얼 엔진](https://www.unrealengine.com/en-US/unreal-engine-5): 언리얼 엔진이 설치되어 있는지 확인합니다. 이 포스트는 UE 5.3을 사용하여 제작되었습니다.
    
2.  [IDE](https://docs.unrealengine.com/5.3/en-US/setting-up-visual-studio-development-environment-for-cplusplus-projects-in-unreal-engine/): UE와 함께 Visual Studios를 사용하는 것이 좋습니다. 에픽게임즈의 비주얼 스튜디오와 UE 5.3 설정 지침을 따르시기 바랍니다.
    
3.  [펍넙:](https://www.pubnub.com/) 무료 [PubNub 계정에](https://admin.pubnub.com/#/login) 가입하여 네트워크에 연결하는 데 필요한 API 키를 받습니다. 앱과 키 세트를 생성해야 하며, 이 [가이드를](https://www.pubnub.com/how-to/admin-portal-create-keys/) 따라 생성하는 방법을 배울 수 있습니다. 또한 온라인 감지를 위해 프레즌스 기능을 활성화해야 하며, 방법은 [방법 가이드를](https://www.pubnub.com/how-to/admin-portal-presence/) 통해 확인할 수 있습니다.
    

PubNub 언리얼 모듈 통합
----------------

PubNub 언리얼 엔진 모듈을 사용하여 온라인 기능을 강화하려면 몇 가지 SDK 설정을 수행하고 프로젝트에 추가하여 기능을 통합할 수 있도록 해야 합니다.

### SDK 셋업

먼저 언리얼 엔진 프로젝트 소스에 SDK 저장소를 복제합니다:

```js
git clone [Repository_URL] [Your_Unreal_Project]/Source/ThirdParty/
```

`Repository_URL` \]을 PubNub C-Core SDK 저장소의 실제 URL로 바꿉니다. ThirdParty 폴더가 없는 경우 생성합니다.

Windows를 사용하는 경우 Visual Studio에서 프로젝트를 엽니다. 도구 > 명령줄 > 개발자 명령 프롬프트에 액세스하여 `nmake` 명령을 실행합니다.

SDK 디렉토리로 이동하여 시스템에 적합한 명령을 사용하여 컴파일합니다(참고: 이 블로그는 Windows OS를 사용하여 작성되었으며 Windows 명령을 사용했습니다):

POSIX(Linux/Mac)

옵션, 아키텍처 및 구현을 적절히 교체합니다.

```js
make -C <option> -f <architecture>.mk pubnub_<implementation>.a
```

Windows:

```js
nmake -f windows.mk
```

Windows 유니버설 플랫폼:

```js
nmake -f windows/uwp.mk
```

OpenSSL:

```js
make -C openssl -f posix.mk pubnub_sync.a
```

**참고**: OpenSSL 옵션을 사용하는 경우, OpenSSL 라이브러리 헤더가 언리얼 헤더와 일치하는지 확인하세요.

소스/서드파티/펍누브모듈/펍누브모듈.빌드.cs 를 열고 컴파일에 사용한 것과 동일한 값으로 `옵션`, `아키텍처`, `구현` 옵션을 조정합니다. 예시

```js
private readonly string Option = "windows"; // posix, windows, openssl
private readonly string Architecture = "windows"; // posix, windows
private readonly string Implementation = "callback"; // sync, callback
```

프로젝트 타깃 파일을 수정하여 PubNub 모듈을 포함하도록 수정하여 모듈을 임포트합니다. `UnrealProject를` 실제 프로젝트 이름으로 바꿔야 합니다:

```js
public class <UnrealProject>[Editor]Target : TargetRules
{
    public <UnrealProject>[Editor]Target (TargetInfo Target) : base(Target)
    {
        //...
        ExtraModuleNames.Add("PubNubModule");
    }
}
```

`UnrealProject.uproject` 에서요:

```js
{
  //...
  "Modules": [
    //...
    {
      "Name": "PubNubModule",
      "Type": "Runtime",
      "LoadingPhase": "Default"
    }
  ],
  //...
}
```

SDK 설정이 거의 완료되었습니다. 이제 남은 것은 비주얼 스튜디오 프로젝트 파일을 생성하거나 새 변경 사항을 포함하도록 파일을 새로 고치는 것입니다. 언리얼 엔진 5.3 에디터를 사용하거나 파일 탐색기에서 `.uproject` 파일을 우클릭하고 Visual Studio 프로젝트 파일을 생성하는 등 여러 가지 방법으로 파일을 생성할 수 있습니다:

![](https://www.pubnub.com/cdn/3prze68gbwl1/2g0GKBvbfZQ1h0a519wSit/983281f98f33410e0f8a33eb81d1b86a/2023-10-15_11_10_40-UnrealEngine-GeneratedBuildFiles.png)

### 모듈 사용

PubNub 언리얼 엔진 모듈 사용을 시작하려면, PubNub를 사용하려는 모듈의 Module `.Build.cs` 파일을 수정하고 모듈을 추가해야 합니다. 이때 `Module을` 모듈 이름으로 바꿔야 합니다:

```js
public class <Module> : ModuleRules
{
    public <Module>(ReadOnlyTargetRules Target) : base(Target)
    {
        //...
        PrivateDependencyModuleNames.Add("PubNubModule");
    }
}
```

마지막으로 파일에 `#include "PubNub.h"` 헤더를 통해 PubNub 헤더를 포함시켜야 합니다. 이미 처리되었으므로 `THIRD_PARTY_INCLUDES_START` 및 `THIRD_PARTY_INCLUDES_END를` 포함할 필요는 없습니다.

실시간 기능 구현하기
-----------

이제 이러한 리얼타임 사용 사례를 UE 게임에 구현할 준비가 되었습니다! 하지만 먼저 PubNub의 작동 원리를 높은 수준에서 조금 더 자세히 살펴보겠습니다.

### 펍넙 개요

PubNub는 Pub/Sub(게시/구독) 모델을 기반으로 합니다. 사용자는 기본적으로 모든 관련 정보가 포함된 페이로드인 메시지를 PubNub 네트워크에 [게시합니다](https://www.pubnub.com/docs/general/messages/publish). 메시지 및 기타 생성된 이벤트를 수신하거나 듣고자 하는 사용자는 PubNub 네트워크에 [가입하고](https://www.pubnub.com/docs/general/messages/receive) 메시지를 파싱합니다. [이벤트 리스너는](https://www.pubnub.com/docs/general/messages/receive#add-a-listener) PubNub 네트워크에서 생성된 메시지와 이벤트를 포착하고 발생한 동작에 따라 트리거하는 데 사용됩니다.

메시지가 올바른 수신자에게 전달되도록 하기 위해 [채널은](https://www.pubnub.com/docs/general/channels/overview) 데이터가 한 장치에서 다른 장치로 전송되는 메커니즘으로 사용됩니다. 채널은 디바이스가 PubNub 네트워크에 메시지를 게시하고 구독하고자 할 때마다 필요합니다. 사용자는 한 번에 하나의 메시지만 게시할 수 있지만, 한 번에 여러 채널을 구독할 수 있습니다.

### 게임 내 채팅

게임 내 채팅 또는 인앱 메시지는 플레이어 참여도를 높이고 사용자 리텐션에 도움이 됩니다. 게임 내 채팅은 게이머가 서로 소통할 수 있도록 하여 커뮤니티 의식을 고취하고 소셜 상호작용을 위한 플랫폼을 제공하여 더욱 즐거운 사용자 경험을 제공합니다.

UE 5 비디오 게임에 인게임 채팅을 추가하여 플레이어가 메시지를 보낼 때마다 메시지를 [게시하는](https://www.pubnub.com/docs/sdks/c-core/api-reference/publish-and-subscribe#publish) PubNub의 Pub/Sub 아키텍처를 활용하면 실시간 커뮤니케이션을 할 수 있습니다. 클라이언트가 적절한 채널을 [구독하여](https://www.pubnub.com/docs/sdks/c-core/api-reference/publish-and-subscribe#subscribe) 이러한 메시지를 수신하도록 하고( [채널 이름에](https://www.pubnub.com/docs/general/channels/channel-naming) 따라 채팅 유형이 결정됨), `OnMessageReceived` 이벤트 리스너에서 이를 포착하여 적절하게 처리하면 됩니다:

```js
// Initialize the PubNub client
PubNubClient->Init(YourPublishKey, YourSubscribeKey);

// Sending a message
FString Channel = "all-chat";
FString Message = "Hello, fellow friends!";
PubNubClient->Publish(Channel, Message);

// Receiving messages:
PubNubClient->Subscribe(Channel);
PubNubClient->OnMessageReceived.AddLambda([](const FString& Channel, const FString& Message) {
    // Handle the received message here and display on screen.
    UE_LOG(LogTemp, Warning, TEXT("Received message on %s: %s"), *Channel, *Message);
});
```

### 온라인 상태 감지

[프레즌스는](https://www.pubnub.com/docs/general/presence/overview) 게임 내 플레이어의 온라인 상태를 파악하는 데 사용되며, 실시간으로 플레이어의 상태에 대한 정보를 전달하는 이벤트를 생성합니다. 프레즌스는 플레이어가 온라인/오프라인 상태, 현재 매치 또는 로비에 있는지 여부, 게임 월드 내 위치, 심지어 어떤 활동을 하고 있는지 등 친구의 온라인 상태를 알려주기 때문에 게임에 매우 중요한 기능입니다.

[프레즌스 API를](https://www.pubnub.com/docs/sdks/c-core/api-reference/presence) 사용하면 [사용자 상태와](https://www.pubnub.com/docs/sdks/c-core/api-reference/presence#user-state) 함께 사용자 지정 이벤트를 포함하여 사용자가 언제 온라인에 접속하고 접속하지 않는지 추적할 수 있습니다. 그런 다음 각 클라이언트를 채널에 구독하여 프레즌스를 추적하고 `OnPresenceEventReceived` 이벤트 리스너를 통해 이러한 이벤트를 수신할 수 있습니다:

```js
// Subscribe to a presence channel
FString PresenceChannel = "presence.all";
PubNubClient->Subscribe(PresenceChannel);

// Listen for presence events
PubNubClient->OnPresenceEventReceived.AddLambda([](const FPubNubPresenceEvent& Event) {
    if (Event.Action == EPubNubPresenceAction::Join) {
        UE_LOG(LogTemp, Warning, TEXT("%s joined the game!"), *Event.UUID);
    } else if (Event.Action == EPubNubPresenceAction::Leave) {
        UE_LOG(LogTemp, Warning, TEXT("%s left the game."), *Event.UUID);
    }
    // Handle other presence actions as needed, including custom user state.
});
```

### 친구/길드/동맹/클랜 목록

언리얼 엔진 게임에 친구, 길드, 동맹, 클랜 목록을 통합하는 것은 플레이어 참여를 촉진하는 데 있어 핵심적인 요소입니다. 이를 통해 플레이어는 게임 밖에서 친구이든, 치열한 대전 중에 친밀한 유대감을 형성했든 간에 게임 내에서 다른 플레이어와 더욱 긴밀한 관계를 형성할 수 있습니다.

이러한 목록은 채널 그룹을 생성하고 구독하여 게임에서 구현할 수 있습니다. [채널 그룹](https://www.pubnub.com/docs/general/channels/subscribe#channel-groups) 을 사용하면 한 번에 많은 수의 채널을 지속적으로 관리할 수 있습니다. 채널 그룹은 기본적으로 채널 목록에 대한 포인터로, 채널 그룹당 최대 2000개의 채널에 대해 한 번의 구독 호출을 보낼 수 있습니다. 채널 그룹은 네트워크에 연결된 사용자 아이디에 고유하므로 채널 그룹에 고유한 이름을 지정하고 해당 플레이어와 연결할 수 있습니다.

[채널 그룹 API를](https://www.pubnub.com/docs/sdks/c-core/api-reference/channel-groups) 사용하여 친구/길드/동맹/클랜 목록을 추가하여 각 목록을 고유한 이름으로 정의할 수 있으며, 각 목록에 채널을 추가하거나 제거하면 관련 플레이어가 게임 내 목록에서 추가/제거되는 것을 나타냅니다. 이러한 그룹에 대한 온라인 상태 감지 및 채팅은 모두 프레즌스를 사용한 게임 내 채팅 및 온라인 상태 감지에 대한 이전 섹션을 따릅니다. 친구/길드/동맹/클랜 목록 구현에 대한 자세한 내용은 아키텍처 설정 [문서를](https://www.pubnub.com/docs/general/resources/design-pattern-friend-list-status-feeds) 참조하세요.

### 실시간 순위표 및 점수 시스템

점수 시스템과 순위표는 재미있는 게임 경험을 제공하는 데 있어 핵심적인 요소입니다. 점수 시스템은 플레이어가 치열한 전투를 벌이는 동안 중요한 정보를 제공하고 승리할 확률을 결정하는 데 필요하며, 순위표는 경기 후 높은 점수를 보기 위해 플레이어 간의 경쟁을 장려하는 수단으로 사용됩니다. 두 가지 모두 리플레이를 장려하고 플레이어의 고착화를 쉽게 도울 수 있는 방법입니다.

점수 시스템은 게임 내 메시지와 유사하게 구현할 수 있습니다. 매치에 참여 중인 플레이어만 업데이트를 받도록 채널 패턴을 설정하고 해당 플레이어가 매치에 참여할 때 해당 채널을 구독하도록 할 수 있습니다. 새로운 피해량 업데이트가 발생하는 등 전송할 업데이트가 있으면 메시지를 작성하여 업데이트를 게시하고 전송합니다. 언리얼 엔진 프로젝트에 구현할 수 있는 다양한 유형의 점수판은 [점수 시스템 가이드를](https://www.pubnub.com/how-to/develop-game-scoring-system/) 참조하세요.

경기가 종료되면 다른 플레이어가 볼 수 있도록 글로벌 리더보드를 업데이트하는 마지막 호출이 이루어집니다. [함수를](https://www.pubnub.com/products/functions/) 사용하면 에지에서 비즈니스 로직을 생성하고 실행하여 PubNub 네트워크를 통과하는 실시간 메시지를 라우팅, 필터링, 변환, 증강 및 집계하는 비즈니스 로직을 생성하고 실행할 수 있습니다. 즉, 서버를 가동하지 않고도 자체 코드나 [타사 통합을](https://www.pubnub.com/integrations/) 호스팅하여 PubNub 메시지가 발생하기 전이나 후에 가로채고, 함수에 대한 데이터베이스 역할을 하는 영구 키-값 저장소인 [KV 저장소 모듈을](https://www.pubnub.com/docs/sdks/functions/kvstore-module) 사용하여 관련 정보를 저장할 수 있습니다.

순위표의 경우 플레이어가 경기를 마친 후 점수를 업데이트한 다음 순위표 업데이트 전용 채널을 구독하여 업데이트된 순위표를 플레이어에게 알리고 싶을 수 있습니다. 함수에 대한 자세한 내용은 [문서를](https://www.pubnub.com/docs/general/serverless/functions/overview) 참조하세요.

다음 단계
-----

이 포스팅에서는 PubNub로 언리얼 엔진 5.3 게임에 리얼타임 기능을 추가하는 방법을 배웠습니다. 게임 [내 메시징, 실시간 점수 시스템 및 리더보드](https://www.pubnub.com/solutions/gaming/), 친구/길드/동맹/클랜 목록 등을 추가하려는 게임 개발자는 PubNub를 사용하여 이러한 기능을 실시간으로 구현할 수 있습니다.

[언리얼 엔진 모듈로](https://github.com/pubnub/c-core/tree/master/unreal) 여러분의 UE 5.3 게임에 리얼타임 기능을 추가하고 싶으신 경우, [문서를](https://www.pubnub.com/docs/sdks/c-core) 확인하여 이러한 리얼타임 기능을 성공적으로 구현하는 데 필요한 사항을 알아보시기 바랍니다. 또한 이 글에서 설명한 기능 등을 선보이기 위해 [유니티](https://www.pubnub.com/docs/sdks/unity) [게임에서](https://github.com/PubNubDevelopers/unity-multiplayer-shooter) 사용되는 [유니티와](https://www.pubnub.com/docs/sdks/unity) 같은 다른 게임 엔진용 SDK도 준비되어 있습니다. 언리얼 엔진 플러그인은 아직 개발 초기 단계이므로 피드백이나 질문이 있으시면 [devrel@pubnub.com](mailto:devrel@pubnub.com) 으로 보내주시거나 [GitHub 저장소에](https://www.pubnub.com/how-to/admin-portal-presence/) 풀 리퀘스트/이슈를 제출해 주시기 바랍니다.

#### 내용

[전제](#h-0)[조건펍넙 언리얼 모듈 통합SDK](#h-1)[설치모듈](#h-3)[](#h-2)[사용실시간 기능 구현펍넙](#h-4)[개요게임 내](#h-5)[채팅온라인](#h-6)[상태 감지친구/길드/얼라이언스/클랜](#h-7)[목록라이브](#h-8)[리더보드 및 점수](#h-9)[시스템다음](#h-10) 단계

펍넙이 어떻게 도움이 되나요?
================

이 글은 원래 [PubNub.com에](https://www.pubnub.com/blog/add-real-time-features-in-unreal-engine-5-3-with-pubnub/) 게시되었습니다.

저희 플랫폼은 개발자가 웹 앱, 모바일 앱, IoT 기기를 위한 실시간 상호작용을 구축, 제공, 관리할 수 있도록 지원합니다.

저희 플랫폼의 기반은 업계에서 가장 크고 확장성이 뛰어난 실시간 에지 메시징 네트워크입니다. 전 세계 15개 이상의 PoP가 월간 8억 명의 활성 사용자를 지원하고 99.999%의 안정성을 제공하므로 중단, 동시 접속자 수 제한 또는 트래픽 폭증으로 인한 지연 문제를 걱정할 필요가 없습니다.

PubNub 체험하기
-----------

[라이브 투어를](https://www.pubnub.com/tour/introduction/) 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.

설정하기
----

PubNub [계정에](https://admin.pubnub.com/signup/) 가입하여 PubNub 키에 무료로 즉시 액세스하세요.

시작하기
----

사용 사례나 [SDK에](https://www.pubnub.com/docs) 관계없이 [PubNub 문서를](https://www.pubnub.com/docs) 통해 바로 시작하고 실행할 수 있습니다.