PubNubでアンリアル・エンジン5.3にリアルタイム機能を追加する
Published: 2024-03-08 07:22:06

アンリアル・エンジン (UE) 5.3 の[マルチプレイヤーゲームやオンラインゲームに](https://www.pubnub.com/solutions/gaming/)リアルタイム機能を追加するのであれば、PubNub が最適です。PubNub は、低レイテンシーのメッセージングとスケーラビリティを保証し、ゲーム内のチャット、オンライン ステータスの検出、フレンド リスト、スコア システム、リーダー ボードなどのソーシャル機能でプレイヤー エクスペリエンスを向上させます。Windows、Mac、iOS、Android、OculusやMeta Questのようなバーチャルリアリティシステム、またはクロスプラットフォーム向けに開発されているかにかかわらず、当社は、お客様がアプリケーションに集中できるよう、リアルタイムのインタラクティブ性を実現するゲームのインフラストラクチャーレイヤーを引き受けます。

PubNubの[アンリアル・エンジン・モジュールを](https://github.com/pubnub/c-core/tree/master/unreal)使用して、UEゲームにこれらのリアルタイム機能などを実装する方法については、こちらをご覧ください。

私たちのUnreal Engine Pluginはまだ開発の初期段階であることにご留意ください。[devrel@pubnub.com](mailto:devrel@pubnub.com)、または私たちの[GitHubリポジトリに](https://www.pubnub.com/how-to/admin-portal-presence/)プルリクエスト/issueを送信してフィードバックをお寄せください。

前提条件
----

始める前に、いくつかのものを準備する必要があります：

1.  [アンリアル エンジン](https://www.unrealengine.com/en-US/unreal-engine-5)：Unreal Engine がインストールされていることを確認してください。この投稿は 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 と Visual Studios のセットアップについては、Epic Games の指示に従ってください。
    
3.  [PubNub](https://www.pubnub.com/)：無料の[PubNub アカウントに](https://admin.pubnub.com/#/login)サインアップして、ネットワークに接続するために必要な API キーを取得します。アプリとキーセットを作成する必要がありますが、その方法はこちらの[ガイドを](https://www.pubnub.com/how-to/admin-portal-create-keys/)参照してください。また、オンライン検出のためにPresenceを有効にする必要があり、その方法は[ハウツーガイドを](https://www.pubnub.com/how-to/admin-portal-presence/)ご覧ください。
    

PubNub Unrealモジュールを統合する
-----------------------

PubNub Unreal Engineモジュールを使用してオンライン機能を利用できるようにするには、SDKのセットアップを行い、プロジェクトに追加して機能を統合できるようにする必要があります。

### SDKのセットアップ

まず、SDKリポジトリをUnreal Engineプロジェクトのソースにクローンします：

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

`Repository_URL]`をPubNub C-Core SDKリポジトリの実際のURLに置き換えてください。ThirdPartyフォルダが存在しない場合は作成します。

Windowsの場合は、Visual Studiosでプロジェクトを開きます。`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 ライブラリ ヘッダが Unreal のものと一致していることを確認してください。

Source/ThirdParty/PubNubModule/PubNubModule.Build.csを開き、`Option`、`Architecture`、および`Implementation` オプションをコンパイルに使用したのと同じ値で調整します。例

```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のセットアップはほぼ完了です。あとはVisual Studios Projectファイルを生成するだけです（または、新しい変更を含めるためにファイルを更新するだけです）。これには、アンリアル エンジン 5.3 エディタを使用する方法や、ファイル エクスプローラで`.uproject`ファイルを右クリックして Visual Studio プロジェクト ファイルを生成する方法などがあります：

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

### モジュールの使用

PubNub Unreal Engine モジュールの使用を開始するには、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 Game に実装する準備が整いました！しかしその前に、PubNubがどのように動作するのか、高いレベルで理解するためにもう少し深く潜ってみましょう。

### PubNubの概要

PubNubはPub/Sub（Publish/Subscribe）モデルに基づいています。ユーザは、基本的にすべての関連情報を含むペイロードであるメッセージを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ネットワークにパブリッシュおよびサブスクライブするたびに必要になります。ユーザは一度に1つのメッセージしか発行できませんが、ユーザは一度に多くの異なるチャンネルを購読することができます。

### ゲーム内チャット

ゲーム内チャットやアプリ内メッセージは、プレイヤーのエンゲージメントを高め、ユーザーの定着を助けます。ゲーム内チャットは、ゲーマー同士のコミュニケーションを可能にし、コミュニティ意識を育み、より楽しいユーザーエクスペリエンスを実現するソーシャルインタラクションのプラットフォームを提供します。

プレイヤーがメッセージを送信するたびにPubNubのPub/Subアーキテクチャを利用してメッセージを[パブリッシュ](https://www.pubnub.com/docs/sdks/c-core/api-reference/publish-and-subscribe#publish)することで、UE 5ビデオゲームにゲーム内チャットを追加してリアルタイムコミュニケーションを行うことができます。クライアントは、これらのメッセージをリッスンするために適切なチャンネルを[サブスクライブ](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)、ゲーム内のプレイヤーのオンラインステータスを決定するために使用され、イベントを生成してリアルタイムでステータスの情報を配信します。Presenceはゲームにとって非常に重要な機能で、プレイヤーにフレンドのオンライン状態、オンラインかオフラインか、現在マッチ中かロビー中か、ゲームワールド内の位置、さらにはどのようなアクティビティに参加しているかなどを知らせることができます。

[Presence API を](https://www.pubnub.com/docs/sdks/c-core/api-reference/presence)使用すると、[User State](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.
});
```

### フレンド/ギルド/アライアンス/プランリスト

Unreal Engine ゲームにフレンド、ギルド、アライアンス、クラン リストを組み込むことは、プレイヤーのエンゲージメントを促進する上で重要な要素です。これにより、プレイヤーは、ゲーム外での友人であるか、または激しい試合中に親密な絆を結んだかに関わらず、ゲーム内で他のプレイヤーとより親密なつながりを作ることができます。

このようなリストは、チャンネルグループの作成と購読を活用することで、ゲーム内に実装することができます。[チャンネルグループを](https://www.pubnub.com/docs/general/channels/subscribe#channel-groups)利用することで、一度に大量のチャンネルを管理することができます。チャンネル・グループは基本的にチャンネル・リストへのポインターで、チャンネル・グループごとに最大2000チャンネルまで1回のサブスクライブ・コールを送ることができます。チャンネルグループはネットワークに接続しているユーザーIDに一意であり、チャンネルグループに一意な名前を付けてそのプレイヤーに関連付けることができます。

フレンド/ギルド/アライアンス/クランリストを追加するには、[Channel Groups 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)参照してください。

### ライブリーダーボードとスコアリングシステム

スコアリングシステムとリーダーボードは、楽しいゲーム体験を提供するための重要な要素です。スコアリングシステムは、プレイヤーが激しい試合を行っている間に重要な情報を提供し、勝利の可能性を判断するために必要です。一方、リーダーボードは、試合後にハイスコアを見るためにプレイヤー間の競争を促す方法として使用されます。どちらもリプレイ性を促進し、プレイヤーを定着させる簡単な方法です。

スコアリングシステムは、ゲーム内のメッセージングと同じように実装することができます。マッチに参加している人だけがアップデートを受け取れるようにチャンネルパターンを設定し、該当するプレイヤーがマッチに参加したらそのチャンネルに登録します。新しいダメージアップデートが発生したときなど、送信するアップデートがあったら、メッセージを作成して送信することでアップデートを公開します。Unreal Engine プロジェクトに実装できるさまざまなタイプのスコアボードについては、[スコアボード システム ガイドを](https://www.pubnub.com/how-to/develop-game-scoring-system/)参照してください。

試合が終了すると、他のプレイヤーが閲覧できるようにグローバル リーダーボードを更新するための最後の呼び出しが行われます。[Functions を](https://www.pubnub.com/products/functions/)使用することで、エッジ上でビジネス ロジックを作成して実行し、PubNub ネットワークを経由するリアルタイムのメッセージをルーティング、フィルタリング、変換、拡張、集約することができます。また、[KVストアモジュールは](https://www.pubnub.com/docs/sdks/functions/kvstore-module)、Functionsのデータベースとして機能する永続的なキーバリューストアです。

リーダーボードでは、プレーヤーが試合を終えた後にスコアを更新し、リーダーボードの更新に特化したチャンネルを購読してプレーヤーにリーダーボードの更新を通知します。Functionsの詳細については、[ドキュメントを](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) 参照して、リアルタイム機能を実装するために必要なものを確認してください。また、他のゲームエンジン用の SDK も用意しています。例えば、[Unity](https://www.pubnub.com/docs/sdks/unity) [ゲームでは](https://github.com/PubNubDevelopers/unity-multiplayer-shooter)、この投稿で説明した機能などを紹介するために[Unity](https://www.pubnub.com/docs/sdks/unity) を使用しています。当社の Unreal Engine プラグインはまだ開発初期段階であるため、フィードバックやご質問は[devrel@pubnub.com](mailto:devrel@pubnub.com)までお寄せいただくか、[GitHub リポジトリに](https://www.pubnub.com/how-to/admin-portal-presence/)プルリクエスト/issue を送信してください。

#### コンテンツ

[前提条件](#h-0)[PubNub Unrealモジュールの](#h-1)[統合](#h-0)[SDKの](#h-1)[セットアップ](#h-2)[モジュールの](#h-3)[使用](#h-2)[リアルタイム機能の](#h-4)[実装](#h-3)[PubNubの](#h-4)[概要ゲーム内](#h-5)[チャットオンラインステータス検出フレンド/ギルド/アライアンス/](#h-7)[クランリストライブリーダーボードとスコアリングシステム](#h-9)[次へ](#h-10)

PubNubはどのようにお役に立ちますか？
=====================

この記事は[PubNub.comに](https://www.pubnub.com/blog/add-real-time-features-in-unreal-engine-5-3-with-pubnub/)掲載されたものです。

PubNubのプラットフォームは、開発者がWebアプリ、モバイルアプリ、IoTデバイス向けにリアルタイムのインタラクティブ機能を構築、提供、管理できるように支援します。

私たちのプラットフォームの基盤は、業界最大かつ最もスケーラブルなリアルタイムエッジメッセージングネットワークです。世界15か所以上で8億人の月間アクティブユーザーをサポートし、99.999%の信頼性を誇るため、停電や同時実行数の制限、トラフィックの急増による遅延の問題を心配する必要はありません。

PubNubを体験
---------

[ライブツアーを](https://www.pubnub.com/tour/introduction/)チェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する

セットアップ
------

[PubNubアカウントに](https://admin.pubnub.com/signup/)サインアップすると、PubNubキーに無料ですぐにアクセスできます。

始める
---

[PubNubのドキュメントは](https://www.pubnub.com/docs)、ユースケースや[SDKに](https://www.pubnub.com/docs)関係なく、あなたを立ち上げ、実行することができます。